이것은 이전 질문에 이어집니다. Bash: 여러 파일에서 지정된 열의 가장 높은 값을 가진 행을 선택하고 가장 높은 값을 가진 행을 포함하는 출력 파일을 만듭니다.
내가 사용한 솔루션은 다음과 같습니다.
for file in mi*
do
sort -k14,14 -n $file | tail -1
done > result
출력 파일을 만들 때 파일 이름이 포함된 열을 추가할 수 있도록 이 코드를 편집하는 쉬운 방법이 있는지, 아니면 다른 접근 방식을 사용해야 하는지 궁금합니다.
이 문제를 발견했습니다여러 파일에서 데이터를 가져오고 파일 이름을 추가하는 Bash 명령하지만 내 필요에 맞게 조정하는 방법을 모르겠습니다.
추가 정보로 업데이트: 파일은 tsv이고 열 이름이 있습니다.
답변1
for file in mi*
do
printf "%s " $file
sort -k14,14 -n $file | tail -1
done > result
또는
for file in mi*
do
echo "$file $(sort -k14,14 -n $file | tail -1)"
done > result
구분 기호에 따라 파일 이름 뒤의 공백을 다른 문자로 바꿀 수 있습니다.
답변2
트릭은 stdout으로 전송된 내용을 변수에 넣은 다음 해당 변수와 파일 이름을 출력하는 것입니다.
에코에서 변수의 순서를 변경할 수 있으며 중요한 경우 구분 기호를 추가할 수도 있습니다.
예를 들어.
for file in mi*
do
myline=$(sort -k14,14 -n $file | tail -1)
echo "$file $myline"
done > result
찾은 답변은 search 라는 명령을 사용합니다 grep
. 여러 파일을 검색하는 경우 검색 문자열이 발견된 파일 이름 앞에 선택적으로 grep을 추가할 수 있습니다.