我對 bash 很陌生,我無法真正弄清楚這個問題。所以我有兩個檔案,看起來像:
檔案 1:
Jack
Peter
John
...
檔案 2:
New York
Houston
Boston
Chicago
Los Angeles
San Diego
Dallas
San Jose
Phoenix
...
從檔案 2 的第一行開始,對于每第四行,我需要在檔案 1 中添加相應的行,并以“-”作為分隔符。結果應如下所示:
New York-Jack
Houston
Boston
Chicago
Los Angeles-Peter
San Diego
Dallas
San Jose
Phoenix-John
到目前為止,我已經確認檔案 2 中的行數正好是檔案 1 中的四倍。我應該如何得到上面的結果?感謝任何幫助。謝謝!
uj5u.com熱心網友回復:
有兩個 GNU sed:
sed '1~4 R file1' file2 | sed '1~5{ N; s/\n/-/ }'
輸出:
紐約杰克 休斯頓 波士頓 芝加哥 洛杉磯-彼得 圣地亞哥 達拉斯 圣荷西 菲尼克斯-約翰
來自man sed:
first~step: 匹配從 line first 開始的每 step'th 行。
R filename: 追加從檔案名讀取的一行。該命令的每次呼叫都會從檔案中讀取一行。這是一個 GNU 擴展。
uj5u.com熱心網友回復:
$ cat file1
Jack
Peter
John
$ cat file2
New York
Houston
Boston
Chicago
Los Angeles
San Diego
Dallas
San Jose
Phoenix
$ awk 'NR%4 == 1{getline name < "file1"; printf "%s-%s\n", $0, name; next} 1' file2
New York-Jack
Houston
Boston
Chicago
Los Angeles-Peter
San Diego
Dallas
San Jose
Phoenix-John
uj5u.com熱心網友回復:
這可能對您有用(GNU sed):
sed '1{x;s/^/cat file1/e;x};1~4{G;s/\n/-/;P;s/[^\n]*\n//;h;d}' file2
在第一行,將檔案 1 放入保存空間。
對于第一行,然后每第四行,附加保留空間,替換第一個換行符-并僅列印第一行。
然后洗掉第一行,用結果覆寫保持空間并洗掉當前行。
uj5u.com熱心網友回復:
$ awk 'NR==FNR{a[NR]=$0; next} {print $0 (FNR%4==1 ? "-" a[ c] : "")}' file1 file2
New York-Jack
Houston
Boston
Chicago
Los Angeles-Peter
San Diego
Dallas
San Jose
Phoenix-John
uj5u.com熱心網友回復:
另一種方法
$ paste -d'\0' file2 <(sed 's/^/-/;G;G;G' file1)
New York-Jack
Houston
Boston
Chicago
Los Angeles-Peter
San Diego
Dallas
San Jose
Phoenix-John
三倍空格的第一個檔案和前綴-,粘貼兩個不帶分隔符的檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/408121.html
標籤:
上一篇:按排序順序將jpg轉換為cbz?
