2013-02-06 62 views
0

喜用兩個物理文件的所有我做的awk做工精細:awk中匹配數/連接兩個文件其中1個是一個變量

awk 'NR==FNR { _[$1]=$2 } NR!=FNR { if(_[$2] != "") print $0" "_[$2]}' codes.txt text.txt 

我所試圖做的事:而不是使用物理文件使用一個變量而不是爲第二個文件..

awk 'NR==FNR { _[$1]=$2 } NR!=FNR { if(_[$2] != "") print $0" "_[$2]}' codes.txt $variable 

,因爲我不必結果導出到一個物理文件,然後使用這個命令將其他文件值與第一個文件映射...

我曾嘗試

echo $variable|awk 'NR==FNR { _[$1]=$2 } NR!=FNR { if(_[$2] != "") print $0" "_[$2]}' codes.txt 

已經沒有工作:(

如這裏問的是例如:

cat text.txt 
564 ERR0001 
535 ERR0002 

cat codes.txt 
ERR0001 This_is_error_1 
ERR0002 This_is_error_2 

awk 'NR==FNR { _[$1]=$2 } NR!=FNR { if(_[$2] != "") print $0" "_[$2]}' codes.txt text.txt 
564 ERR0001 This_is_error_1 
535 ERR0002 This_is_error_2 

awk 'NR==FNR { _[$1]=$2 } NR!=FNR { if(_[$2] != "") print $0" "_[$2]}' codes.txt text.txt |tr "_" " " 
564 ERR0001 This is error 1 
535 ERR0002 This is error 2 

這裏是失敗的:

gg=$(cat text.txt) 

echo $gg 
564 ERR0001 535 ERR0002 

awk 'NR==FNR { _[$1]=$2 } NR!=FNR { if(_[$2] != "") print $0" "_[$2]}' codes.txt $gg |tr "_" " " 
awk: (FILENAME=codes.txt FNR=2) fatal: cannot open file `564' for reading (No such file or directory) 

IFS=' '; 
echo $gg 
564 ERR0001 
535 ERR0002 

awk 'NR==FNR { _[$1]=$2 } NR!=FNR { if(_[$2] != "") print $0" "_[$2]}' codes.txt $gg |tr "_" " " 
awk: (FILENAME=codes.txt FNR=2) fatal: cannot open file `564' for reading (No such file or directory) 

至於建議加入:

join -1 2 -2 1 text.txt codes.txt 
ERR0001 564 This_is_error_1 
ERR0002 535 This_is_error_2 

join -1 2 -2 1 $gg codes.txt 
join: extra operand `ERR0002' 
Try `join --help' for more information. 

echo $gg 
564 ERR0001 
535 ERR0002 

回答tripleee

echo $gg|join -1 2 -2 1 - codes.txt 
ERR0001 564 This_is_error_1 
ERR0002 535 This_is_error_2 

echo $gg|awk 'NR==FNR { _[$1]=$2 } NR!=FNR { if(_[$2] != "") print $0" "_[$2]}' codes.txt - |tr "_" " " 
564 ERR0001 This is error 1 
535 ERR0002 This is error 2 
+2

我不知道你在說什麼。發佈一些示例輸入和預期輸出。 –

+0

在你的問題工作中做了第二個代碼塊嗎? – Kent

+0

@ kent nope它沒有工作 – Vahid

回答

1

您可以將變量和管道它echo到讀取標準輸入任何命令。

對於它的價值,許多Unix實用程序接受文件名參數-來表示標準輸入。

echo "$gg" | sort | join -1 2 -2 1 - text.txt 

最近版本的Bash也有<<<"$gg"這裏的字符串運算符。

+0

謝謝Tripleee - 我已經使用了管道進行tarring或netcatting並一起使用tar,但沒有考慮到這種情況 - 再次感謝 - 效果很好 – Vahid

0

is a command將只爲你做這個:

$ join -1 2 -2 1 text.txt codes.txt 
+0

一個文件和變量的問題? – Vahid

+0

它要求在joiner字段上對兩個輸入文件進行排序。 – tripleee

相關問題