2013-05-22 55 views
1

我有一個文件numbers.txt,其中包含每行上的一個數字。使用包含行號的輸入文件從文件中打印行

我想使用該文件打印出文件lines.txt中的行,即與numbers.txt中的數字對應的行。

這可以用awk或者其他方式直接在Unix命令行中完成嗎?

實施例:

numbers.txt

1 
2 
4 
6 

lines.txt

1: line one 
2: line two 
3: line three 
... 
6: line six 

輸出:

1: line one 
2: line two 
4: line four 
6: line six 
+0

我從來沒有嘗試過這樣的事情,但是閱讀本http://www.unix.com/shell-programming-scripting/186639- compare-values-two-files-matching-rows-print-corresponding-values-file-1-file2.html –

回答

3

嘗試這種AWK單行:

awk 'NR==FNR{n[$0];next}FNR in n' numbers.txt lines.txt 
+0

+1是的,就是這麼做的。 –

1

您可以在文件lines.txt在使用該命令輸出線n

cat lines.txt | head -<n> | tail -1 

,然後實現它在numbers.txt所有線路作爲自己的n

for n in `cat numbers.txt`; do cat lines.txt | head -$n | tail -1; done; 

注意:如果lines.txt中沒有與某個數字對應的行,則會輸出文件中的最後一行;你需要一個額外的測試來檢查並避免這種情況。

1
parallel -ka numbers.txt 'sed -n {}p lines.txt' 

Here更多信息關於平行

0
awk -F":" 'FNR=NR{a[$0];next}($1 in a){print}' numbers.txt lines.txt 
+1

'='而不是'==',不必要的parens和不必要的'{print}'。 –

相關問題