我需要替換大文件的頭中的日期。所以我有多個列頭,使用|(管)作爲分隔符,像這樣: A | B05 | 1 | xxc | 2018/06/29 | AC23 | SoOn替換一個大的.txt文件頭中的列--unix
所以我需要相同的標題,但與日期(第五列)更新:A | B05 | 1 | xxc | 2018/08/29 | AC23
對我有什麼解決方案?我用awk和sed嘗試過,但他們兩個都帶我比我更大的錯誤。我是新手,我真的很想理解這個解決方案。那麼你能幫我嗎?
我需要替換大文件的頭中的日期。所以我有多個列頭,使用|(管)作爲分隔符,像這樣: A | B05 | 1 | xxc | 2018/06/29 | AC23 | SoOn替換一個大的.txt文件頭中的列--unix
所以我需要相同的標題,但與日期(第五列)更新:A | B05 | 1 | xxc | 2018/08/29 | AC23
對我有什麼解決方案?我用awk和sed嘗試過,但他們兩個都帶我比我更大的錯誤。我是新手,我真的很想理解這個解決方案。那麼你能幫我嗎?
您可以使用下面的命令,從每一行替換第5列與newdate變量的內容:
awk -v newdate="2018/08/29" 'BEGIN{FS=OFS="|"}{ $5 = newdate }1' infile > outfile
說明
awk -v newdate="2018/08/29" ' # call awk, and set variable newdate
BEGIN{
FS=OFS="|" # set input and output field separator
}
{
$5 = newdate # assign fifth field with a content of variable newdate
}1 # 1 at the end does default operation
# print current line/row/record, that is print $0
' infile > outfile
如果你想櫃面跳到第一線如果你有頭,然後使用FNR>1
awk -v newdate="2018/08/29" 'BEGIN{FS=OFS="|"}FNR>1{ $5 = newdate }1' infile > outfile
如果你要替換第1行第5列才使用FNR==1
awk -v newdate="2018/08/29" 'BEGIN{FS=OFS="|"}FNR==1{ $5 = newdate }1' infile > outfile
如果你仍然有問題,與樣品輸入和 預期輸出幀你的問題,從而使這將很容易解釋你的問題。
這是可怕的。對我來說正確的解決方案是最後一個,並正常工作。非常感謝! – Light
短SED溶液:
sed -Ei '1s~\|[0-9]{4}/[0-9]{2}/[0-9]{2}\|~|2018/08/29|~' file
-i
- 修改文件就地
1s
- 代替僅在第一(標題)線
[0-9]{4}/[0-9]{2}/[0-9]{2}
- 日期模式
你好,謝謝你的回答。當我使用你的解決方案時,我收到一條錯誤消息<< sed:1:「header.txt」:在h命令結尾的額外字符>> – Light
@Light,它應該在Linux上工作。你在MacOS上嗎? – RomanPerekhrest
是的,我在MacOs上做了一些測試 – Light
顯示您的工作和錯誤消息。 –