linux - 如何将 awk 命令应用于一定数量的文件?
问题描述
我有 X 个文件,我有这个命令:
awk ' /'$awk_value'/ {split(FILENAME,a,"-");print a[2]"-"a[3]"-"a[4]","$2","$3}' /xxx/xxx/all_my_files > /xxx/xxx/xxx/TEST.txt
但例如,如果我有 120 个文件……我怎样才能将此命令应用于仅最后七个文件?
解决方案
您可以使用该tail
命令,然后使用xargs
将输出用作参数列表。
ls /xxx/xxx/my_files*.txt | tail -7 |
xargs awk -v awk_value="$awk_value" '$0 ~ awk_value {split(FILENAME,a,"-");print a[2]"-"a[3]"-"a[4]","$2","$3}' > /xxx/xxx/xxx/TEST.txt
这假设“最后 7 个”基于ls
命令可以生成的顺序(例如,按文件名排序,按修改时间排序)。
还要注意-v
将 shell 变量转换为awk
变量的选项的使用,而不是连接它的方法(如果包含空格,这将不起作用$awk_value
——您应该始终用双引号括起变量以防止这种情况发生)。
推荐阅读
- javascript - 使用多个泛型参数扩展 TypeScript 类
- java - Java CompletableFuture 获取方法
- android - 使小部件与已经在应用程序中的按钮执行相同操作的最简单方法是什么?
- ruby-on-rails - 如果方法被发送到不是模拟的对象,如何在 MiniTest 中断言?
- c# - 使用 LINQ 忽略重复的行
- jquery - jQuery数据表按钮(Excel)在Excel格式上设置行高
- javascript - 这个幻灯片放映代码我做错了什么?
- php - Xdebug + IntelliJ:调试器总是在真实设置断点后面一行
- symfony - SQLSTATE [23000]:违反完整性约束:1048 列 'user_id' 不能为空
- angular - Angular:如何在延迟加载的模块中改变核心模块服务?