日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

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

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

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

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

當你這樣做時會發生什么:

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

更新:

如果這是你所說的代碼,那是因為你的shell腳本沒有擴展$a,因為awk命令在單引號內.

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選項將特定值傳遞給awk,類似于(在您的情況下):

awk -F, -v a=$a '{ if ($10==a) print $0 }' ...

然后變量成為一流的awk公民,而不必擔心誰在進行擴展.

進一步更新:

我站在原來的建議背后.選擇的方法肯定會搞砸.

我的主目錄中有一個名為XpVm的目錄(以及其他目錄),我創建了包含單行的CDRNOutput_X.csv文件:

1,2,3,4,5,6,7,8,9,XpVm,11

當我執行:

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

(我已經刪除了以.開頭的目錄,因為它們導致了另一個問題),我得到了這個輸出:

workspace is a directory

NO

Documents is a directory

NO

XpVm is a directory

NO

Downloads is a directory

NO

這顯然不是預期的.但是,當我按照我最初的建議使用-v選項時,命令:

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

(唯一的區別是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

哪個是對的.

最后更新(希望如此):

我想我已經解決了問題.我現在在另一臺機器上(所以目錄名稱只是tmp和tmp2),當我運行原始腳本時:

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

那是因為awk將if語句看作:

if ($10 == tmp) {

(沒有引號,因為引號實際上在用于包圍目錄名稱的awk字符串之外).對于名為tmp的awk變量而不是實際的字符串“tmp”,這將測試10美元.你需要的是確保引號在awk腳本中,如:

if ($10 == "tmp") {

并且您可以使用以下腳本執行此操作(僅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

請注意,雙引號是重復的.我仍然在$a附近保留雙引號以防萬一有人犯下了創造一個帶有空格的文件的令人發指的罪行:-)

運行該腳本會產生:

tmp is a directory

1,2,3,4,5,6,7,8,9,tmp,11

tmp2 is a directory

NO

這就是我認為你的目標.

所以,結果是,如果你不想使用awk變量,你可以改變你的awk字符串:

'{ if ($10 == '"$a"') print $0 }'

至:

'{ if ($10 == "'"$a"'") print $0 }'

它應該運作正常.

總結

以上是生活随笔為你收集整理的linux导出并追加到文件,linux – 如何将awk结果输出到文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。