Cat

通過標題組合目錄中的文件並省略共享內容

  • August 21, 2016

所以我在這裡發現了一個與我想在這裡做的相反的問題:Concatenate multiple files with same header

我正在嘗試根據標題中的“>”字元將具有相同子字元串的對應文件的數百個文件中的一個目錄中的 2 個文件合併或連接到一個文件中。每個文件中有數千個標題,與我附加的連結中提出的問題相反,標題以外的內容是相同的,所以我不想更改任何以“>”開頭的行。

本質上,我想通過共享字元“>”將文件 1 與文件 2 組合起來,並按順序保留文件 1 的內容。

File1
> MGBNCNOSNC_142
9u2o4840204a9
> MGBNCNOSNC_143
AOISCJNWDCSNDCCW
> MGBNCNOSNC_144
AOISCJ40204DZZW

File2
>King_Henry
>Queen_jerry
>Jack_jill

Output
> MGBNCNOSCNC_142 > King_henry
9u2o4840204a9
> MGBNCNOSCNC_143 > Queen_jerry
AOISCJNWDC
> MGBNCNOSNC_144 > Jack_jill
gefSCJ40204DZZW

感謝您的幫助,讓我知道我是否可以更清楚!

您可以將 的行讀File2入索引 awk 數組,然後將它們依次附加到 的相應行File

awk '
 NR==FNR {a[i++]=$0; next} 
 /^>/ {$0 = $0" "a[j++];}
 {print}
 ' File2 File1

或者,如果您有 GNU sed(帶有R副檔名),您可以嘗試

sed '/^>/ R File2' File1 | sed '/^>/ {N;s/\n/ /}'

如果File1要匹配的每一行都恰好有一個附加行,則另一種選擇可能是將空格加倍File2,然後paste將文件放在一起

sed 'G' File2 | paste -d ' ' File1 -

儘管這會導致不匹配行中出現額外的尾隨空格;File2如果這是不可取的,您可以在每行的開頭插入一個空格,並且paste它們沒有分隔符

sed 's/^/ /; G' File2 | paste -d '' File1 -

引用自:https://unix.stackexchange.com/questions/304727