日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

linux导出并追加到文件,linux – 如何将awk结果输出到文件

發(fā)布時(shí)間:2025/4/16 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux导出并追加到文件,linux – 如何将awk结果输出到文件 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

輸出重定向通常是你正在使用的shell的一個(gè)特性,并且考慮到它有多少使用,如果你發(fā)現(xiàn)了一個(gè)bug,我會(huì)非常驚訝:-)

你確定你沒有嘗試用awk本身而不是shell進(jìn)行重定向嗎?

當(dāng)你這樣做時(shí)會(huì)發(fā)生什么:

echo 'hello' | awk '{print}' >qq.tmp

更新:

如果這是你所說的代碼,那是因?yàn)槟愕膕hell腳本沒有擴(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)心誰在進(jìn)行擴(kuò)展.

進(jìn)一步更新:

我站在原來的建議背后.選擇的方法肯定會(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è)問題),我得到了這個(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)解決了問題.我現(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語句看作:

if ($10 == tmp) {

(沒有引號(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)以防萬一有人犯下了創(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ǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。