bash - awk 脚本从 txt 文件中读取数据
问题描述
我正在尝试创建一个 awk 脚本来从 txt 文件中读取数据并创建一个输出脚本。是否可以使用 awk 创建输出?
while IFS=',' read -r a b c; do echo "source "$a" and target "$b" and line "$c"" ; done < test.txt
测试.txt
"x","y","8"
"x","6"
"y","7"
输出:
source "x" and target "y" and line "8"
source "x" and target "6" and line
source "y" and target "7" and line
预期输出:
"source x and target y and line 8"
"source x and line 6"
"target y and line 7"
解决方案
我发现很难从提供的输入和输出中清楚地辨别需求。但是,如果我们稍微调整您的输入(与 Corentin 的建议略有不同,我们可以提供一个工作 awk 脚本来提供您所需的输出。
让我们从一个假设开始:
输入格式如下:
<source>,<target>,<line>
现在我们可以编写这个 awk 脚本:
awk -F, '
BEGIN {
split( "source target line" , value , " " )
}
{
output=""
for ( field = 1 ; field <= length(value) ; field++ )
{
if ( $field ) {
output = output ( output ? " and " : "" ) value[ field ] " " $field
}
}
print "echo " output
}' << EOF
"x","y","8"
"x",,"6"
,"y","7"
EOF
老实说,上面的代码有点偏离目标。具体来说,我没有处理输入或输出中的双引号。我认为如果我们谈论引号,解决方案的可读性会降低。从技术上讲,如果输入中的引号是为了保护逗号(就像 CSV 一样),我会考虑用支持 csv 的 python(或其他语言)编写这个程序。
这是上述程序的输出:
echo source "x" and target "y" and line "8"
echo source "x" and line "6"
echo target "y" and line "7"
推荐阅读
- javascript - 从视图处理 toFormData
- json - 有没有办法在python的循环中存储列表值
- html - 使用 flex-direction 列避免 flex 子元素的宽度相同
- typescript - 是否可以显式导入内置函数(例如 DOM 全局变量)?
- javascript - Vue从axios调用返回数据对象到控制器
- ruby - 计算具有活动记录的字符串列的最大数量
- python - Pandas TypeError:“TextFileReader”对象不可下标
- powerapps - 如何为多列创建搜索框?
- python - 带有移动窗口的 Pandas 数据透视表
- java - 如何从地理围栏触发其他设备