2013-01-10 63 views
2

我有這樣的代碼如何使用awk比較Linux的多個文件中的兩列

[[email protected] ]$ awk '{print $1}' awk1.txt awk2.txt 
line1a 
line2a 
file1a 
file2a 

圖中顯示了這兩個文件

我如何才能找到$1(of file 1)$1(of file2)的ccolumns,分別

+0

你的問題實在是相當不明確的。請[編輯](http://stackoverflow.com/posts/14250405/edit)您的問題包括一些示例輸入(即「awk1.txt」的內容和「awk2.txt」的內容是什麼? ),並請包括一些預期產出。另外,你如何定義「比較」一詞?分別打印file1第一列和第二列file2的最簡單方法是:'awk'FNR == NR {print $ 1;下一個} {打印$ 1}'file1 file2'。但這不是你想要做的。你究竟想在這裏做什麼? – Steve

+0

@STEVE,那'FNR = NR'我在找什麼。我想知道如何區分diff文件列。但我怎麼做,如果我有三個文件 – user175386049

+0

我已經添加了一個答案,但請參閱鏈接。有關於如何使用循環處理多個文件的信息。但是,如果您發現自己打開大量文件句柄,則可能有更好的方法來解決您的問題。 HTH。 – Steve

回答

1

由於根據上面的意見,三個或多個文件,設置類似的條件語句:

FILENAME == ARGV[1] 

例如:

awk 'FILENAME == ARGV[1] { print $1 } FILENAME == ARGV[2] { print $1 } FILENAME == ARGV[3] { print $1 }' file1.txt file2.txt file3.txt 

或者,如果你有文件的水珠:

變化的條件語句到:

FILENAME == "file1.txt" 

例如:

awk 'FILENAME == "file1.txt" { print $1 } FILENAME == "file2.txt" { print $1 } FILENAME == "file3.txt" { print $1 }' *.txt 

您可能還需要閱讀更多有關變量ARGC and ARGV。請讓我知道是否需要更多解釋。乾杯。

+1

感謝哥們,我現在明白了 – user175386049

0
awk 'NR==FNR{a[FNR]=$0;next} {print a[FNR],$0}' file_1 file_2 

發現here

+0

但我想用awk – user175386049

0

我不確定你確實需要什麼。 也許你需要預定義變量:FILENAME

awk '{print $1,FILENAME}' awk1.txt awk2.txt 

這上面的命令將輸出:

line1a awk1.txt 
line2a awk1.txt 
file1a awk2.txt 
file2a awk2.txt