linux - Bash 脚本剪切和文件名未硬编码
问题描述
我有一个名为 names.txt 的文件,如下所示:
0,james,hard,fun,circle
1,caron,hard,agin,square
我想让它最终像:
james,hard,fun,circle,c0
caron,hard,agin,square,c1
我想运行一个请求文件的脚本,然后使用 $1 参数对文件进行这些更改并剪切。
我知道这是一个可能涉及大量代码的难题,所以我非常感谢你们的帮助。
注意:我的文件包含 9999 个输入,第一个输入是 0 ,所以总共有 10,000 个。
解决方案
这是一个完整的文件,它将按照您的要求修改文件并将其写入终端,特别是标准输出,这是默认情况下写入终端的“通道”之一。(渠道不是一个技术术语)。
#!/bin/bash
awk -F, -vOFS=, '{print $0,"c" $1 }' "$1" | cut -d, -f2-
awk
如果数据中包含空行,我们可以通过在片段中添加检查来跳过它们。
#!/bin/bash
awk -F, -vOFS=, 'NF > 0 {print $0,"c" $1 }' "$1" | cut -d, -f2-
如果文件被命名rotate.sh
并且您的数据whatever.csv
,您可以调用为
bash rotate.sh whatever.csv
这会将修改后的文件打印到您的终端。如果你想把它保存在某个地方,写这个。
bash rotate.sh whatever.csv > /tmp/a.csv
不写以下
bash rotate.sh whatever.csv > whatever.csv
上面的脚本不能修改它正在读取的同一个文件。
sed
@lurker 提供的示例脚本可以在 Linux 上运行。如果按字面意思在命令行中键入它,它将修改文件。
sed -i "s/^\([0-9]*\),\(.*\)$/\2,c\1/" whatever.csv
该命令的 OS X 等效项是
sed -i '' "s/^\([0-9]*\),\(.*\)$/\2,c\1/" whatever.csv
推荐阅读
- terratest - 将 terratest 与单独的 backend.hcl 文件一起使用
- mongodb - 检查所有过滤器是否存在于数据库中
- javascript - 在 React Native 上尝试 AsyncStorage
- laravel - 如何在 Laravel 中添加非 Laravel 网站/脚本
- xcode - 我无法在我的 MacBook Pro 中安装 Cocopods
- ruby-on-rails - Rails 5 和每 30 秒的神秘请求
- php - 使用 PHP 生成 PDF (TCPD)
- azure - Azure 应用程序配置警报从未解决
- python - 如何在 python 中运行 try、break 或 continue 以进行函数循环?
- javascript - jwplayer中的倒带按钮