다른 파일에서 읽으려는 줄 목록이 포함된 파일이 있습니다. 이 줄을 grep
전체 줄을 읽고 정보를 추출할 수 있는 유틸리티( )에 출력하고 싶습니다 . 이 줄을 포함하는 파일은 다음과 같습니다.
cat input.txt
2088
2089
2095
2096
어떤 이유로 나는이 문제에 갇혀 있습니다. 특정 줄 번호를 매개변수로 전달하는 것이 가능하다는 것을 알고 있지만 sed
이를 변수에 넣어서 공급하는 방법을 모르겠습니다.
답변1
awk 'NR==FNR{linesToPrint[$0];next}
FNR in linesToPrint' line-numbers.txt file.txt
답변2
귀하의 질문을 올바르게 이해하면 다음과 같이 작동합니다.
for i in $(cat numbers.txt); do cat lines.txt|tail -n +$i|head -n 1; done
"numbers.txt" 파일의 각 숫자에 대해 다른 파일에서 해당 줄을 추출하여 인쇄합니다.
동일하며 다음과 sed
같습니다 xargs
.
xargs -i sed "{}q;d" lines.txt <numbers.txt
답변3
가설미카스의 해석맞다면 해결책은 다음과 같습니다 awk
.
awk 'FNR==NR{a[i++]=$0} # Process the first file
FNR!=NR{ # Process the second file
for (i in a){
if(FNR==a[i]){
print $0
}
}
}' file_with_line_numbers other_file
펄에서는:
perl -E '
while(<>){
chomp;
if($file2) { say if exists $lines{$.} }
else { $lines{$_}++ }
} continue { if (eof){$.=0; $file2++} }'\
file_with_line_numbers other_file
답변4
sed -n $(xargs printf "%sp;" < input.txt) data
-n
말하다sed
명시적으로 지시하지 않는 한 줄을 인쇄하지 마세요.xargs
표준 입력의 행을 인수로 사용하여 명령을 실행합니다.printf
각 매개변수는 설명된 대로 형식화됩니다. 위의 내용은 $(...)
다음과 같이 확장됩니다(예제 파일의 경우).
2088p;2089p;2095p;2096p;
sed
이것은 2088, 2089, 2095 및 2096 행을 인쇄하도록 지시하는 일련의 명령입니다 .
이렇게 하면 여러 번 읽 xargs -i sed "{}q"
거나 파이프하는 대신 각 파일을 한 번 읽습니다 .head
tail