Csh - 通过 xargs 中的 awk 获取字段

Csh - Fetching fields via awk inside xargs

我很难理解这种行为:

脚本行为:读取文件(包含日期);打印多级目录树中的文件列表并获取它们的大小,仅打印文件大小,(后续步骤:总文件大小)。

开始脚本:

 cat dates | xargs -I {} sh -c "echo '{}: '; du -d 2 "/folder/" | grep {} | head"
2000-03:
1000 /folder/2000-03balbasldas
2000-04:
12300 /folder/2000-04asdwqdas
[and so on]

但是当我尝试在第一个字段上通过 awk 进行过滤时,我仍然得到整行

  cat dates | xargs -I {} sh -c "echo '{}: '; du -d 2 "/folder/" | grep {} | awk '{print }'"
2000-03:
    1000 /folder/2000-03balbasldas
    2000-04:
    12300 /folder/2000-04asdwqdas

我已经通过 divide-et-impera 解决了它,下面的命令工作正常很好:

du -d 2 "/folder/" | grep '2000-03' | awk '{print }'
1000

恐怕我遗漏了一些非常微不足道的东西,但到目前为止我还没有找到任何东西。

有什么想法吗?谢谢!

输入:包含名为YYYY-MM-random_data的文件夹和包含字符串的文件的目录:

ls -l
drwxr-xr-x  2 user  staff  68 Apr 24 11:21 2000-03-blablabla
drwxr-xr-x  2 user  staff  68 Apr 24 11:21 2000-04-blablabla
drwxr-xr-x  2 user  staff  68 Apr 24 11:21 2000-05-blablabla
drwxr-xr-x  2 user  staff  68 Apr 24 11:21 2000-06-blablabla
drwxr-xr-x  2 user  staff  68 Apr 24 11:21 2000-06-blablablb
drwxr-xr-x  2 user  staff  68 Apr 24 11:21 2000-06-blablablc
[...]

cat dates
2000-03
2000-04
2000-05
[...]

预期输出:文件夹中所有文件占用的磁盘总和 space,其名称包含文件中的字符串 dates

2000-03: 1000
2000-04: 2123
2000-05: 1222112
[...]

====== 但特别是,我对为什么 awk 无法获取我要求的列 $1 感兴趣。

好吧,经过大量研究,我似乎自己找到了答案:D 我将 post 放在这里,希望它能帮助其他人。

https://unix.stackexchange.com/questions/282503/right-syntax-for-awk-usage-in-combination-with-other-command-inside-xargs-sh-c

诀窍是避开 $ 符号。

 cat dates | xargs -I {} sh -c "echo '{}: '; du -d 2 "/folder/" | grep {} | awk '{print $1}'"

使用 GNU Parallel 看起来像这样:

parallel --tag "eval du -s folder/{}* | perl -ne '"'$s+=$_ ; END {print "$s\n"}'"'" :::: dates

--tag 在行前加上日期。

{} 替换为日期。

eval du -s folder/{}* 查找所有以日期开头的目录,并给出这些目录的总数 du

perl -ne '$s+=$_ ; END {print "$s\n"}' 汇总 du

的输出

最后有一点引用技巧来正确引用它。