如何在awk命令中读取文件

时间:2013-10-01 18:29:33

标签: linux awk

我有两个看起来像的文件:

**file1.txt**

"a","1","11","111"

"b","2","22","222"

"c","3","33","333"

"d","4","44","444"

"e","5","55","555"

"f","6","66","666"

**file2.txt**

"b"

"d"

"a"

"c"

"e"

"f"

我需要创建一个更改file1顺序的脚本,并以file2的顺序开头。 e.g:

"b","2","22","222"

"d","4","44","444"

"a","1","11","111"

"c","3","33","333"

"e","5","55","555"

"f","6","66","666"

我创建了一个看起来像的命令:

nawk '/^("b")/' file1 ; nawk '/^("d")/' file1 ; nawk '/^("a")/' file1 ; nawk '/^("c")/' file1 ; nawk '/^("e")/' file1 ; nawk '/^("f")/' file1

它可以解决问题,但是我想进一步自动化它,但不知道如何继续。我怎样才能创建一个命令或变量来查看file2("b")的第1行并将其放在上面的命令中,然后查看file2("d")的第2行,并将其放在上面的命令中,依此类推。基本上如果可能的话,我希望命令查看文件2并填写上面命令中的空格。你们建议的任何其他更方便的命令将不胜感激。请注意,我目前必须在上面的命令中手动插入文件2中的字母。

实际文件可能包含超过100行

1 个答案:

答案 0 :(得分:0)

awk -F, 'NR==FNR { a[$1]=$0; next }
    ($1 in a) { print a[$1] }' file1 file2

将所有file1读入内存,然后按file2的顺序打印。如果file1非常大,则可能不可行。

这是一个常见的Awk习语;如果您需要更详细的解释,请搜索许多近似重复项。