linux导出并追加到文件,linux – 如何将awk结果输出到文件
輸出重定向通常是你正在使用的shell的一個(gè)特性,并且考慮到它有多少使用,如果你發(fā)現(xiàn)了一個(gè)bug,我會(huì)非常驚訝:-)
你確定你沒(méi)有嘗試用awk本身而不是shell進(jìn)行重定向嗎?
當(dāng)你這樣做時(shí)會(huì)發(fā)生什么:
echo 'hello' | awk '{print}' >qq.tmp
更新:
如果這是你所說(shuō)的代碼,那是因?yàn)槟愕膕hell腳本沒(méi)有擴(kuò)展$a,因?yàn)閍wk命令在單引號(hào)內(nèi).
for a in $(find $OUPUT_DIR/ -maxdepth 1 -mindepth 1 -type d -printf "%P\n")
do
echo $a is a directory
awk -F, '{ if ($10 == '"$a"') print $0 }' $OUPUT_DIR/CDRNOutput_${CDR_DATE}.csv > $OUPUT_DIR/$a/CDR-${CDR_DATE}.csv
done
我傾向于使用-v選項(xiàng)將特定值傳遞給awk,類似于(在您的情況下):
awk -F, -v a=$a '{ if ($10==a) print $0 }' ...
然后變量成為一流的awk公民,而不必?fù)?dān)心誰(shuí)在進(jìn)行擴(kuò)展.
進(jìn)一步更新:
我站在原來(lái)的建議背后.選擇的方法肯定會(huì)搞砸.
我的主目錄中有一個(gè)名為XpVm的目錄(以及其他目錄),我創(chuàng)建了包含單行的CDRNOutput_X.csv文件:
1,2,3,4,5,6,7,8,9,XpVm,11
當(dāng)我執(zhí)行:
for a in $(find . -maxdepth 1 -mindepth 1 -type d -printf "%P\n" | grep -v '^\.')
do
echo $a is a directory
awk -F, '{
if ($10 == '"$a"') {
print $0
} else {
print "NO";
}
}' ./CDRNOutput_X.csv
done
(我已經(jīng)刪除了以.開頭的目錄,因?yàn)樗鼈儗?dǎo)致了另一個(gè)問(wèn)題),我得到了這個(gè)輸出:
workspace is a directory
NO
Documents is a directory
NO
XpVm is a directory
NO
Downloads is a directory
NO
這顯然不是預(yù)期的.但是,當(dāng)我按照我最初的建議使用-v選項(xiàng)時(shí),命令:
for a in $(find . -maxdepth 1 -mindepth 1 -type d -printf "%P\n" | grep -v '^\.')
do
echo $a is a directory
awk -F, -v a=$a '{
if ($10 == a) {
print $0
} else {
print "NO"
}
}' ./CDRNOutput_X.csv
done
(唯一的區(qū)別是a的變化),我得到:
workspace is a directory
NO
Documents is a directory
NO
XpVm is a directory
1,2,3,4,5,6,7,8,9,XpVm,11
Downloads is a directory
NO
哪個(gè)是對(duì)的.
最后更新(希望如此):
我想我已經(jīng)解決了問(wèn)題.我現(xiàn)在在另一臺(tái)機(jī)器上(所以目錄名稱只是tmp和tmp2),當(dāng)我運(yùn)行原始腳本時(shí):
for a in $(find . -maxdepth 1 -mindepth 1 -type d -printf "%P\n" | grep -v '^\.')
do
echo $a is a directory
awk -F, '{
if ($10 == '"$a"') {
print $0
} else {
print "NO";
}
}' ./CDRNOutput_X.csv
done
使用包含tmp而不是XpVm的修改后的CDRNOutput_X.csv,我得到:
tmp is a directory
NO
tmp2 is a directory
NO
那是因?yàn)閍wk將if語(yǔ)句看作:
if ($10 == tmp) {
(沒(méi)有引號(hào),因?yàn)橐?hào)實(shí)際上在用于包圍目錄名稱的awk字符串之外).對(duì)于名為tmp的awk變量而不是實(shí)際的字符串“tmp”,這將測(cè)試10美元.你需要的是確保引號(hào)在awk腳本中,如:
if ($10 == "tmp") {
并且您可以使用以下腳本執(zhí)行此操作(僅if行已更改):
#!/bin/bash
for a in $(find . -maxdepth 1 -mindepth 1 -type d -printf "%P\n" | grep -v '^\.')
do
echo $a is a directory
awk -F, '{
if ($10 == "'"$a"'") {
print $0
} else {
print "NO";
}
}' ./CDRNOutput_X.csv
done
請(qǐng)注意,雙引號(hào)是重復(fù)的.我仍然在$a附近保留雙引號(hào)以防萬(wàn)一有人犯下了創(chuàng)造一個(gè)帶有空格的文件的令人發(fā)指的罪行:-)
運(yùn)行該腳本會(huì)產(chǎn)生:
tmp is a directory
1,2,3,4,5,6,7,8,9,tmp,11
tmp2 is a directory
NO
這就是我認(rèn)為你的目標(biāo).
所以,結(jié)果是,如果你不想使用awk變量,你可以改變你的awk字符串:
'{ if ($10 == '"$a"') print $0 }'
至:
'{ if ($10 == "'"$a"'") print $0 }'
它應(yīng)該運(yùn)作正常.
總結(jié)
以上是生活随笔為你收集整理的linux导出并追加到文件,linux – 如何将awk结果输出到文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux内核 漏洞扫描,Linux k
- 下一篇: linux运行欧陆风云,MY-SAMA5