簡體   English   中英

bash&awk:遍歷dir,在所有文件上運行兩個單獨的awk命令並保存在新目錄中

[英]bash & awk: Loop through dir running two separate awk commands on all files and saving in new dir

我昨天問了一個問題並得到了很好的幫助: http//goo.gl/HfovmX

我想我已經掌握了使用awk來解決問題,但我現在需要自動完成一些工作,並希望我能用bash和awk做到這一點。

從其他線程回顧:

我正在使用Mac並且有一堆文本文件,沒有唯一標識符將記錄相互綁定。 將它們綁定在一起的唯一方法是在導入到stats包之前記下文本文件中的位置並處理它們。

解決方案代碼是:

awk '/^AB1/{ab1=$0;next}/^AB2/{print $1,$2,ab1}' file01.txt > newfile01.txt

我在將文件名附加到輸出文件中的$ 7位置時遇到問題,所以我運行了第二個awk命令並且它有效:

awk '{print $1,$2,$3,$4,$5,$6,FILENAME}' newfile01.txt > newnewfile01.txt

我希望能夠做的是將腳本指向充滿這些文件的目錄。 理想情況下,它將在所有* .txt上運行上述兩個命令,然后保存到保持相同文件名的新目錄(如果更容易)或使用新文件名保存到同一目錄(例如:在文件名前加上'new' )。

對我來說最終的結果是我將所有新文件捕獲到一個大型txt文件中並導入到數學程序中。 這個導入的文件現在將具有文件名來幫助我們在第一個位置獲取行的ID,並且我們將所有信息一起記錄在一行/一行上,因此我們可以進行分析。

感謝您提前尋求幫助/指導。

修改您提出的解決方案,使其現在迭代當前目錄中的* txt文件:

for f in *txt ; do awk '/^AB1/{ab1=$0;next}/^AB2/{print $1, $2, ab1}' "$f" > "new$f"; awk '{print $1,$2,$3,$4,$5,$6,FILENAME}' "new$f" > "newnew$f"; done

但我懷疑你想要第一個文件的文件名,而不是第二個文件:

for f in *txt ; do awk '/^AB1/{ab1=$0;next}/^AB2/{print $1, $2, ab1, FILENAME}' "$f" > "new$f"; done

最后,第一個解決方案的以下多行版本將幫助您了解正在發生的事情:

for f in *txt
do
    awk '/^AB1/{ab1=$0;next}/^AB2/{print $1, $2, ab1}' "$f" > "new$f"
    awk '{print $1,$2,$3,$4,$5,$6,FILENAME}' "new$f" > "newnew$f"
done

您可以嘗試這些並根據您的具體要求進行修改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM