- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个非常粗糙的脚本 getinfo.sh,它从所有子文件夹中名称为 FILENAME1 和 FILENAME2 的所有文件以及子文件夹的路径中获取信息。如果使用 "getinfo.sh n" 调用脚本,awk 结果应该只从 FILENAME2 中选取第 n 行。我要将所有信息打印在一行中!
问题是,如果我使用 print 而不是 printf,信息将写入一个新行,但我的脚本可以正常工作。如果我使用 printf,我可以在脚本完成后在命令提示中看到 awk 命令的最后一位,但在同一行中的 grep 命令之后它不是 paset。总而言之,完整的行会很长,但这是故意的。你愿意告诉我我做错了什么吗?
#!/bin/bash
IFS=$'\n'
while read -r fname ;
do
pushd $(dirname "${fname}") > /dev/null
printf '%q' "${PWD##*/}"
grep 'Search_term ' FILENAME1 | tail -1
awk '{ if(NR==n) printf "%s",$0 }' n=$1 $2 FILENAME2
popd > /dev/null
done < <(find . -type f -name 'FILENAME1')
如果这更容易,我也很乐意 grep 第 n 行?
解决方案:
#!/bin/bash
IFS=$'\n'
while read -r fname ;
do
pushd $(dirname "${fname}") > /dev/null
{
printf '%q' "${PWD##*/}"
grep 'Search_term' FILENAME1 | tail -1
} | tr -d '\n'
if [ "$1" -eq "$1" ] 2>/dev/null
then
awk '{ if(NR==n) printf "%s",$0 }' n="$1" FILENAME2
fi
printf "\n"
popd > /dev/null
done < <(find . -type f -name 'FILENAME1')
最佳答案
您在评论中说得更清楚了。
I want the output of printf '%q' "${PWD##*/}" and grep 'Search_term ' FILENAME1 | tail -1 and awk '{ if(NR==n) printf "%s",$0 }' n=$1 $2 FILENAME2 to be printed in one line
首先,我们有三个命令,每个命令打印一行输出。由于命令无关紧要,让我们将它们包装在函数中以简化答案:
cmd1() { printf '%q\n' "${PWD##*/}"; }
cmd2() { grep .... ; }
cmd3() { awk ....; }
要在它们之间不换行地打印它们,我们可以:
使用命令替换,删除尾随的空换行符。一些 printf:
printf "%s%s%s\n" "$(cmd1)" "$(cmd2)" "$(cmd3)"
或者一些 echo :
echo "$(cmd1) $(cmd2) $(cmd3)"
或追加到一个变量:
str="$(cmd1)"
str+=" $(cmd2)"
str+=" $(cmd3)"
printf" %s\n" "$str"
等等。
我们可以使用 tr -d '\n'
从流中删除换行符:
{
cmd1
cmd2
cmd3
} | tr -d '\n'
echo # newlines were removed, so add one to the end.
或者我们也可以只从第一个 n-1
命令中删除换行符,但我认为这不太可读:
{
cmd1
cmd2
} | tr -d'\n'
cmd3 # the trailing newline will be added by cmd3
If i do not pass a number the awk command should be omited.
我看到您的 awk
命令扩展了 $1
和 $2
,但我只看到 $1
是作为 n=$1
环境变量传递给 awk
。我不知道什么是 $2
。你可以在 $#
的值上写 if-s 参数的数量:
if (($# == 2)); then
awk '{ if(NR==n) printf "%s",$0 }' n="$1" "$2" FILENAME2
fi
对于您要处理的每种情况都类似。记住正确的引用。
关于linux - 在 grep 之后在同一行打印 awk 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54438879/
是否可以从 awk 文件执行另一个 awk 文件?使用 awk 文件我需要执行当前文件夹中的所有 awk 文件。是否可以在 awk 中进行此类操作? 最佳答案 是的你可以。您需要使用 system()
这是一个 awk 脚本,它尝试根据第一列设置两个文件的差异: BEGIN{ OFS=FS="\t" file = ARGV[1] while (getline < file)
awk 逐行处理文件。假设每一行操作不依赖于其他行,有没有办法让 awk 一次并行处理多行? 是否有任何其他文本处理工具可以自动利用并行性并更快地处理数据? 最佳答案 唯一试图提供 awk 并行实现的
我有文件: 结果.txt Apple fruits 10 20 30 Car vehicle 40 50 60 Book study 70 80 90 假设这里第 2 列是特征,第 3 列是最小值
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我对 awk 的行为感到惊讶表演时浮点数 计算。它导致我对表格数据进行错误计算。 $ awk 'BEGIN {print 2.3/0.1}' 23 0.1}' )。 那么我应该如何执行大于 (
为什么我在下面的例子中得到分隔符前后的空格? awk -F'^' '{print $1,":",$2}' SERVER_2012-02-29-12-15-00 3969 : 1272 3969 :
我有一个文件,其中每四行是这样的: HISEQ15:454:D27KKACXX:6:2316:16241:100283 1:N:0:GTTTCG (对于那些感兴趣的人,此文件包含DNA序列) 我需
你能帮我按 $2 列中的坐标合并行吗?有一系列坐标以一个为单位增长。我想输出 f.e. :第 1 行合并到第 4 行 9079811-9079814,之后没有系列,因此将其合并到另一行等。对于输入中的
大家好,我是 awk 的新手,我可以问一下我有这样的输入文件吗: # ABC DEFG value1 GH value2 GH value3 GH # BCF SQW value4 GH value5
大家好,我想问一下,我对awk中的括号{}感到非常困惑,就像我写了一段代码 { FNR == 3 { print $1 " age is " $2 } } 但它在外括号上给了我错误但没有在打印语
我想知道如何在 awk 中使用多行注释。到目前为止,我一直在使用 # 来评论一行。有人可以就此指导我。谢谢你。 最佳答案 AWK 中没有多行注释,但如果需要,您可以伪造它。这是一种至少适用于 GNU
关于AND逻辑运算符的一个基本问题。我试图根据第1列和第2列的值提取数据文件niveles.csv中的某些字段。我想写一个awk语句,说“当field1 = date和field2 = area然后打
以下命令按预期工作。 # some command | awk '/(\|\|\)/,/;/' create table todel1 (id int) max_rows=2 /*!*/; alter
我有一个日志文件,需要在服务器上“重播”。 它包含这样的条目: Request: query: EXEC prc_insert_customer @param0: 11
如何从制表符分隔的字符串中选择第一列? # echo "LOAD_SETTLED LOAD_INIT 2011-01-13 03:50:01" | awk -F'\t' '{prin
我正在尝试在目录中的多个文件的内容中执行一些 grep 并将我的 grep 匹配附加到单个文件中,在我的输出中我还想要一个包含文件名的列,以了解哪些文件条目已被拾取。我试图使用 awk 来实现相同的目
我想选择文件中第9列的绝对值小于500的行。列有时为正,有时为负。 awk -F'\t' '{ if ($9 output.bam 到目前为止这不起作用..互联网上的一轮告诉我,要使用绝对值,我们应
例如,假设我运行以下命令: gawk -f AppendMapping.awk Reference.tsv TrueInput.tsv 假设文件名会改变。在遍历第一个文件时,我想创建一个映射。 map
我正在使用这个命令; awk -v regex1='new[[:blank:]]+File\(' 'BEGIN{print "Regex1 =", regex1}' 这警告我; awk: warnin
我是一名优秀的程序员,十分优秀!