文件1是替代嵌套的AWK數組?
foo"blahblah#AAA17"blahblah
foo"blahblah#BBB64"blahblah
foo"blahblah#CCC53"blahblah
foo"blahblah#DDD59"blahblah
foo"blahblah#EEE22"blahblah
foo"blahblah#FFF49"blahblah
文件2是製表符分隔,是
AAA17 something9197
BBB64 something333
CCC53 something268
DDD59 something5050
EEE22 something4643
FFF49 something2
我想一些文本添加到每個file1中的線路。文本將包含來自file2的字段2,如下所示。使用gawk我可以用嵌套數組得到想要的結果:
awk -F"\t" 'FNR==NR {arr1[$1]=$2; next} {split($0,arr2,"#|\"")} {print $0": moomoo "arr1[arr2[3]]}' file2 file1
foo"blahblah#AAA17"blahblah: moomoo something9197
foo"blahblah#BBB64"blahblah: moomoo something333
foo"blahblah#CCC53"blahblah: moomoo something268
foo"blahblah#DDD59"blahblah: moomoo something5050
foo"blahblah#EEE22"blahblah: moomoo something4643
foo"blahblah#FFF49"blahblah: moomoo something2
是否有一種簡單的方法可以做到不涉及嵌套數組?
請注意,這兩個文件可能有他們的行洗牌 - 不是像這裏所示的順序。
非常感謝,我不知道你可以用這種方式爲2個文件分別設置字段分隔符。 – user2138595
是將變量設置爲文件之間的不同初始值是在文件列表區域設置變量的極少數正當理由之一,而不是用'-v var = value'設置它們。在GNU awk中,你可以在'BEGINFILE'部分中交替地設置它們,並且在任何awk中你總是可以做'FNR == 1 {FS ='whatever'; $ 0 = $ 0}'。 '$ 0 = $ 0'是強制awk使用新的FS值將記錄重新分割成字段。 –