5

結合したい 2 つの csv/text ファイルがあります。どちらにも同じ最初の行が含まれています。sed と cat を使用してマージされたファイルを生成する方法を見つけようとしていますが、最初の行のコピーは 1 つだけです。そして、私は構文で時間を過ごしています。どんな助けでも大歓迎です:-D! ありがとう、アンドリュー

4

4 に答える 4

4

awk の別のオプション:

awk 'NR==FNR || FNR>1' file1.txt file2.txt .. fileN.txt

これにより、最初のファイルのすべての行、または後続のファイルの最初の行の後の任意の行が印刷されます。

于 2012-08-27T03:02:40.210 に答える
4

data1.txtこれにより、 filesとdata2.txtin fileが結合されmerged.txt、 の最初の行がスキップされますdata2.txt。問題がなければ awk を使用します。

(cat data1.txt; awk 'NR>1' data2.txt) > merged.txt

awk は、行番号が 1 より大きいすべての行を file から file に追加data2.txtしますmerged.txt

NR処理中のファイルの現在の行番号を表す組み込みの awk 変数です。ブール式NR > 1が true の場合、awk はその行を暗黙的に出力します。

そのままにしておくことを気にしない場合はdata1.txt、2番目のファイル(最初の行を差し引いたもの)を追加して、これだけに減らすことができます:

awk 'NR>1' data2.txt >> data1.txt
于 2012-08-27T02:44:43.130 に答える
2

最も簡単な解決策は次のとおりです。

( cat file1.txt ; tail -n +2 file2.txt ) > file3.txt

これには、実行していることを明確に示すという利点があります。最初のファイル全体を印刷し、次に 2 番目のファイルの最初の行を除くすべてを印刷し、出力を 3 番目のファイルに書き込みます。

于 2012-08-27T03:29:28.913 に答える
1

1 行で解決 '1 d' は、file2 の最初の行を削除することを意味します

次のコマンドは、結果を file1 に追加します。

sed '1 d' file2 >> file1
于 2012-08-27T03:28:47.697 に答える