2016-07-26 105 views
-2
>cat tmp1 

1 

2 

3 

>cat tmp2 

vol1 

vol2 

殼兩個文件希望這個答案合併在像粘貼命令

vol1 1 

vol1 2 

vol1 3 

vol2 1 

vol2 2 

vol2 3 
+1

請格式化正確的問題,檢查[問]並顯示你的努力。 – fedorqui

+0

這完全不同於'paste'命令... – Kusalananda

回答

0

只是找到了一種方法做,

for file in `cat tmp1` 
do 
     for f in `cat tmp2` 
     do 
       echo $file $f 
     done 
done 
+0

[不要用'for for'讀取行](http://mywiki.wooledge.org/DontReadLinesWithFor)。另外,通常最好使用文本處理工具。 –

1

如果行的順序不是那麼重要

awk 'FNR==NR{a[$0];next}{for(i in a){print $0,i}}' tmp2 tmp1 

如果要恢復訂單:

awk 'FNR==NR{a[FNR]=$0;l=FNR;next}{for(i=1;i<=l;i++){print $0,a[i]}}' tmp2 tmp1 
+0

我不知道你爲什麼要特別提出'nawk';這應該在任何版本中工作。您可以在第一個塊中使用'a [++ n] = $ 0'來跟蹤行數。 –

1
$ while read a; do while read b; do echo $a $b; done<tmp1; done<tmp2 
vol1 1 
vol1 2 
vol1 3 
vol2 1 
vol2 2 
vol2 3 

或者用一個更好的縮進:

while read a; do 
    while read b; do 
     echo $a $b 
    done <tmp1 
done <tmp2 

對於在tmp2文件中的每個字,回聲它隨後在tmp1文件中的每個字。

如果在這兩個文件中的實際數據包含反斜槓,或者如果tmp2文件包含在第一列破折號,那麼下面會有一個更好更強大的解決方案:

while read -r a; do 
    while read -r b; do 
     printf '%s %s\n' "$a" "$b" 
    done <tmp1 
done <tmp2 
+0

我建議總是使用'read -r'並引用你的變量。另外,請考慮使用'printf'%s%s \ n'「$ a」「$ b」'。 –

+0

@TomFenech你說得對,但我們得到了一組特定的數據。不過,我會更新答案。 – Kusalananda

+0

@TomFenech在這種情況下使用printf有什麼好處?另外,因爲變量是否包含空格並不重要,在這種情況下,引用嚴格來說是不必要的。 – Kusalananda