我想準備一個腳本,其中文件內容隨文件名而變化。
假設我有一個檔名ABC_20161027220153.txt
,文件的內容就像
2000|2000_ABC|04|||0000000000||
我想製作一個腳本,其中文件內容如下所示更改
2000|2000_ABC|04|20161027|27.10.2016 22.01.53|0000000000||
我怎樣才能做到這一點?
答案1
為此有幾個步驟:
- awk 知道變數中的目前檔名
FILENAME
- 如果我們沒有將檔案名稱拆分為解碼的元素(此處硬編碼在每個新輸入檔案的第一行完成),那麼我們使用該
substr
函數來幫助我們。 - 對於每個輸入行,先前透過語句為我們分割
|
符號BEGIN
,將欄位 4 和 5 替換為其新值 - 列印重建的線
將它們放在一起(我將其命名為“abc.awk”):
BEGIN { OFS=FS="|" }
{
if (FNR == 1) {
f4=substr(FILENAME, index(FILENAME, "_") + 1, 8);
f5a=substr(FILENAME, index(FILENAME, "_") + 9, 6);
f5=substr(f4, 7, 2) "." substr(f4, 5, 2) "." substr(f4, 1, 4) " " \
substr(f5a, 1, 2) "." substr(f5a, 3, 2) "." substr(f5a, 5, 2);
}
$4=f4
$5=f5
print $0
}
$ awk -f abc.awk ABC_20161027220153.txt
2000|2000_ABC|04|20161027|27.10.2016 22.01.53|0000000000||