簡體   English   中英

Linux CP使用AWK輸出

[英]Linux CP using AWK output

我一直在努力學習更多關於Linux的知識,並且今天早上專注於awk命令。 我一直試圖開始工作的命令如下。

ls -lRt lpftp.* | awk '{print $7, $9}' | mkdir -p $(awk '{print $1}') | ls -lRt lpftp.* | cp $(awk '{print $9, $7}')

本質上,我試圖根據上次修改日的文件將目錄中的每個文件移動到子目錄中。 該命令首先只打印我想要的文件,然后使用mkdir根據上次修改的月份創建一個文件夾。 之后我想要做的是將每個文件移動到其關聯的目錄中,但是現在命令是將每個文件移動到01文件夾中並打印出以下文本

cp: 0653-436  12 is a directory.
    Specify -r or -R to copy.

每個目錄一次。

有誰知道如何解決這個問題? 或者,如果有更好的方法去做呢?

ls -lRt lpftp.* | awk '{print $7, $9}' | while read day file ; do mkdir -p "$day"; cp "$file" "$day"; done

dodone之間的命令將針對每行輸出執行,第一件事是awk打印在day變量中,第二件打印在file (每行)。 我在這里使用引號有點不必要,因為變量中沒有空格給定它們的設置方法。

做這樣的事情的最安全的方法 - 也是最快的執行 - 是使用awk對數據輸出shell腳本。 在awk中,打印您希望執行的mkdircp命令。 將結果輸入head (1)直到您滿意為止。 也許看整個事情在以下 (1)。 然后執行如下:

ls -lRg lpfpt.* | awk script.awk | sh -ex

這會將命令回顯到標准錯誤,並在第一個錯誤時停止。 如果你絕對確定它是正確的,請刪除x選項。

這種方法相對於awk中的循環或一堆子進程(使用system函數)的優點是:

  • 你可以看到將會發生什么,以及發生了什么
  • 執行速度

暫無
暫無

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

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