我試圖做一些不尋常的,並覆蓋上Unexpected new line when writing out in Unix Shell Script相同的文件這個問題,只是出於好奇Linux的寫入與AWK和T相同的文件:很奇怪的行爲
我發現了一些嘗試,我可以發球> to_same_file,它的工作原理可以在第一次嘗試時看到,然後隨後的嘗試產生一個空文件,我的假設是,這必須與處理時間有關。第一次嘗試的含義,需要更長的時間才能開球並且有時間到I/O,因爲它在其他嘗試中發生得更快,並且沒有機會及時寫入文件以及它已經讀取它..只是有興趣瞭解爲什麼發生這種奇怪的行爲
[email protected]:~/$ cp 2.csv 1.csv
[email protected]:~/$ cat 1.csv
ABCD89A, Admin, shop, Stall Count, 2014-01-06 09:00:00, 0
ABCD89N, Admin, shop, Stall Count, 2014-01-06 09:00:00, 0
[email protected]:~/$ awk -F"," '{
timestamp=$5;
gsub(":"," ",timestamp);
gsub("-"," ",timestamp);
EPOCH=(mktime(timestamp))
}
{
print $0","EPOCH
}' 1.csv 2>&1 | tee > 1.csv
[email protected]:~/$ cat 1.csv
ABCD89A, Admin, shop, Stall Count, 2014-01-06 09:00:00, 0,1388998800
ABCD89N, Admin, shop, Stall Count, 2014-01-06 09:00:00, 0,1388998800
[email protected]:~/$ cp 2.csv 1.csv
[email protected]:~/$ cat 1.csv
ABCD89A, Admin, shop, Stall Count, 2014-01-06 09:00:00, 0
ABCD89N, Admin, shop, Stall Count, 2014-01-06 09:00:00, 0
[email protected]:~/$ awk -F"," '{
timestamp=$5;
gsub(":"," ",timestamp);
gsub("-"," ",timestamp);
EPOCH=(mktime(timestamp))
}
{
print $0","EPOCH
}' 1.csv 2>&1 | tee > 1.csv
[email protected]:~/$ cat 1.csv
[email protected]:~/$ cp 2.csv 1.csv
[email protected]:~/$ awk -F"," '{
timestamp=$5;
gsub(":"," ",timestamp);
gsub("-"," ",timestamp);
EPOCH=(mktime(timestamp))
}
{
print $0","EPOCH
}' 1.csv 2>&1 | tee > 1.csv
[email protected]:~/$ cat 1.csv
[email protected]:~/$ cp 2.csv 1.csv
[email protected]:~/$ cat 1.csv
ABCD89A, Admin, shop, Stall Count, 2014-01-06 09:00:00, 0
ABCD89N, Admin, shop, Stall Count, 2014-01-06 09:00:00, 0
[email protected]:~/$ awk -F"," '{
timestamp=$5;
gsub(":"," ",timestamp);
gsub("-"," ",timestamp);
EPOCH=(mktime(timestamp))
}
{
print $0","EPOCH
}' 1.csv 2>&1 | tee -a > 1.csv
[email protected]:~/$ cat 1.csv
[email protected]:~/$
此外,'cat'打開'file'進行讀取,但shell打開(並截斷)''file'進行寫入。根據shell,設置重定向可能在命令行解析時發生,在這種情況下,它不會是競爭條件(因爲它是確定性的),但幾乎肯定不是所期望的行爲。 – rici