2012-08-27 32 views
5

我有兩個csv /文本文件,我想加入。兩者都包含相同的第一行。我試圖找出如何使用sed和cat來生成合並文件,但只有第一行的一個副本。我有一段時間的語法。任何幫助將不勝感激:-D! 謝謝, 安德魯File1 +(File2 - first line)> File3

回答

4

本文將結合文件data1.txtdata2.txt文件merged.txt,跳過從data2.txt第一線。如果你確定它它採用的awk:

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

的awk從文件data2.txt追加行號> 1的所有行到文件merged.txt

NR是一個內置的awk變量,代表正在處理的文件的當前行號。如果布爾表達式NR > 1爲true,則awk會隱式打印該行。

如果你不關心保持data1.txt完好,你可以只添加你的第二個文件(減去第一行),減少到只此:

awk 'NR>1' data2.txt >> data1.txt 
+2

或者,您可以使用'tail -n + 2'而不是'awk'NR> 1''。 –

+0

@ TannerL.Swett Neat ..我在想首先使用'head'或'tail',但我確定如何用'awk'來做到這一點。當然,如果OP不關心保留'data1.txt',解決方案可以跳過第一個命令,並將第二個文件(第一行)附加到該文件。 – Levon

4

另一種選擇使用awk:

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

這會打印第一個文件中的所有行,或者打印第一行後面的文件中的任何行。

+0

如果我這樣做會發生什麼:'awk'NR == FNR || FNR> 1'* .txt' –

+0

您將依賴文件通配匹配的文件的順序。如果他們都包含相同的第一行,那麼這應該是安全的。你爲什麼不試試看看會發生什麼? – ghoti

1

與一個線 「1 d」解決表示刪除第一行file2中

以下命令將追加的結果到file1

sed '1 d' file2 >> file1 
+0

您正在使用此命令修改'file1'和'file2' - 這可能與OP沒關係。最好提供兩種選擇(另一種不改變原始文件)。 – Levon

+0

@Levon:不,你沒有在這裏修改'file2'。 – tripleee

+0

@tripleee剛剛測試過它,它不*刪除*,而是*不顯示*第一行..得到它。儘管答案可能會更好地表達。 – Levon

2

我說的最直接的解決方案是:

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

它具有明確你在做正是說明的優勢:打印整個第一個文件,然後打印,但所有的SE第一線cond文件,將輸出寫入第三個文件。

+0

哇!感謝大家!!!!!!! :-D –

相關問題