Questions tagged «text-processing»

通过程序,脚本等操作或检查文本

4
通过awk或sed按第一列连接行
awk在以下情况下如何使用? 我想连接以同一列开头的行。只有在加入第一列保持(在这种情况下aaa,www,hhh)。 文件可以用空格或制表符分隔。 输入示例: aaa bbb ccc ddd NULL NULL NULL aaa NULL NULL NULL NULL NULL NULL aaa bbb ccc NULL NULL NULL NULL www yyy hhh NULL NULL NULL NULL hhh 111 333 yyy ooo hyy uuuioooy hhh 111 333 yyy ooo hyy NULL 所需的输出: aaa bbb ccc …

8
交换无数列
我有一个带有列的文件。参见以下示例: a b c ... z 1 2 3 ... 26 我想交换所有列,其中第一列变成最后一列,第二列变成最后一列...等等。 z y x ... a 26 25 24 ... 1 是否有一个衬板(awk或sed)做到这一点? 我知道awk只有几个列时可以使用,但是我希望能够对具有数千个列的文件执行此操作。 tac做到完美的线条。 我想我正在寻找对应的列。 rev 不适用于我,因为它还会交换列中的内容。

2
当空单元格被漏掉时,如何在控制台中显示TSV(csv):`column -t -s $'\ t'`
我有带有列的文件tab。 当某些行的单元格为空时(在开始时,在中间),我有文件。 在这种情况下,column -t -s $'\t'只会失败: 输入: $ echo -e 'A\tB\tC\tD\n\tb1\t\td1\n\t\t\td2\na3\t\t\td3' > in.tsv $ hexdump -C in.tsv 00000000 41 09 42 09 43 09 44 0a 09 62 31 09 09 64 31 0a |A.B.C.D..b1..d1.| 00000010 09 09 09 64 32 0a 61 33 09 09 09 64 33 0a …

2
如何拆分stdout转到几个输出文件?
说,我有一个命令command,它将大量行输出到stdout: line1 line2 ..... lineN 我想将输出保存到磁盘,而不是保存为单个文件,而是保存为每个文件序列具有1000行stdout的文件: file0001.txt: ------------- line1 .... line1000 file0002.txt: ------------- line1001 .... line2000 etc 我试图用谷歌搜索答案,但是每次谷歌都向我tee指示命令时,在这种情况下这是没有用的。可能是我输入了错误的查询。

3
wc -L报告制表符的行长为8。错误或功能?
-L是的有用功能wc,所以我想。打印最长行的长度。由于某种原因,它会将单字节的制表符扩展为8个长度。 是否可以通过某种方式将其设置为不“扩展”制表符?这项扩张背后的原理可能是什么? echo -n $'\t' | wc -L 输出 8 wc(GNU coreutils)7.4 GNU bash,版本4.1.5

2
在“ while IFS = read ..”中,IFS为什么无效?
我可能有绝对错误的提示,但令我信服的是,将IFS设置为预先执行/完成列表中的命令之一绝对没有任何效果。在下面的脚本中显示的所有示例中,都 使用外部IFS(在while构造之外)。 这里发生了什么?在这种情况下,我对IFS的功能是否有误解?我希望将数组拆分的结果显示在“预期”列中。 #!/bin/bash xifs() { echo -n "$(echo -n "$IFS" | xxd -p)"; } # allow for null $IFS show() { x=($1) echo -ne " (${#x[@]})\t |" for ((j=0;j<${#x[@]};j++)); do echo -n "${x[j]}|" done echo -ne "\t" xifs "$IFS"; echo } data="a b c" echo -e "----- -- -- …

4
在鼠标,复制和粘贴之前,他们如何设法驱动Unix计算机?
由于Unix已有40年的历史,因此Unix比计算机鼠标的发明要古老。(实际上,如果Unix是1969年的鼠标,而鼠标是1972年的鼠标,则只有3年。)在这个世界上,新用户如何在Unix上做任何不复制和粘贴的操作?我知道他们总是有一个带有复制/粘贴功能的文本编辑器,但是我在Linux上所做的一切都是从Web浏览器复制,然后(从CLIPBOARD)粘贴到vim或gedit或gnome终端中。你也一样吧 我只是无法想象将一个man文件加载到vim中,然后将代码从其中复制并粘贴到临时缓冲区中,然后让bash执行该缓冲区。也许他们从未离开过emacs。那是答案吗?

3
有没有办法使perl -i不破坏符号链接?
我的一个朋友指出,如果您这样做: perl -pi.bak -e 's/foo/bar/' somefile 当“ somefile”实际上是一个符号链接时,perl会按照文档所说的去做: 它通过重命名输入文件,使用原始名称打开输出文件并选择该输出文件作为print()语句的默认值来做到这一点。该扩展名(如果提供)用于修改旧文件的名称以制作备份副本[...] 这将导致指向未更改的实际文件的新符号链接“ somefile.bak”,以及具有更改的新的已更改常规文件“ somefile”。 在许多情况下,遵循符号链接将是理想的行为(即使它使.bak文件的正确位置不明确)。除了测试包装器中的符号链接并适当处理大小写以外,还有其他简单的方法吗? (sed做同样的事情,这是值得的。)

3
解析日志文件以获取频繁的IP
因此,在遭受DDOS攻击以将顽皮的 ip从我的日志中拉出时,我将它们一起砍掉了。任何人都有任何改进或其他建议可以使它更好吗? 这是一般的想法: 仅从记录文件中提取IP 排序他们 uniq数一下 再次排序 和字符串o'pipes: cut --delim " " -f7 /var/log/apache_access | sort | uniq -c | sort -rn > sorted-ips.txt

3
按标题名称以awk打印列
我有一个像这样的文本文件 foo bar baz 1 a alpha 2 b beta 3 c gamma 我可以使用awk通过来打印某些列,例如1和3,{print $1, $3}但是我想通过指定列的标题来指定要打印的列,例如{print $foo, $baz}。这很有用,因此我不必打开文件并手动对列进行计数即可查看哪一列,并且如果列号或顺序发生更改,我也不必更新脚本。我可以使用awk(或其他shell工具)执行此操作吗?

4
从字节偏移量获取行号
具有文件的字节偏移量。 有没有提供此字节行号的工具? 字节计数从零开始,例如:第一个字节为0而不是1。 行号以1.开头 文件可以同时包含纯文本,“二进制” blob,多字节字符等。但是我感兴趣的部分:文件结尾,仅包含ASCII。 示例文件: 001 002 003 <<-- first zero on this line is byte 8 004 具有字节偏移量8将使我行3。 猜猜我可以用这样的东西来找到行号: 一个。tail -c+(offset + 1) file | wc -l,这里+1为tail从1计数 湾 wc -l file C。那么tail -n+num 这里num是a - b + 1 但是...是否有可以num直接给我的相当普遍的工具? 编辑,错误:或更明显的是: head -c+offset file | wc -l

4
在Vim编辑器中删除行的空白
我在文件中有类似以下内容的文本: sample text some random text even more random text text with no indent worst indention 我需要删除每一行之前的空白区域。一行我要做的是 0dw 我可以使用重复相同的命令。但通过手动导航到下一行。 但是有没有办法将“ 0dw”应用于这些行呢? 我想有一种使用宏的方法,但是我以前没有使用过。但是,如果没有其他选择,我愿意学习它们。

3
阻止自动EOF到命名管道,并在需要时发送EOF
我有一个程序,在读取给定流中的EOF时会自动退出(在以下情况下为stdin)。 现在,我想制作一个Shell脚本,该脚本创建一个命名管道并将程序的stdin连接到它。然后,脚本使用和(以及其他工具退出时自动生成EOF)多次写入管道。我面临的问题是,当第一个操作完成时,它会向管道发送EOF并退出程序。如果我使用类似的东西,那么我打算退出程序时无法发送EOF。我正在研究一种平衡的解决方案,但无济于事。 我已经找到了如何防止EOF以及如何手动发送EOF的方法,但是我无法将它们结合在一起。有什么提示吗? echocatechotail -f #!/bin/sh mkfifo P program < P & : # Run in background # < P tail -n +1 -f | program echo some stuff > P # Prevent EOF? cat more_stuff.txt > P # Prevent EOF? send_eof > P # How can I do this? …

10
使用Shell脚本从字符串中删除所有重复的单词
我有一个像 "aaa,aaa,aaa,bbb,bbb,ccc,bbb,ccc" 我想从字符串中删除重复的单词,然后输出将像 "aaa,bbb,ccc" 我尝试过此代码源 $ echo "zebra ant spider spider ant zebra ant" | xargs -n1 | sort -u | xargs 使用相同的值可以正常工作,但是当我提供变量值时,它也会显示所有重复的单词。 如何删除重复的值。 更新 我的问题是如果用户相同,则将所有对应的值添加到单个字符串中。我有这样的数据-> user name | colour AAA | red AAA | black BBB | red BBB | blue AAA | blue AAA | red CCC | …

4
是否可以通过Shell脚本修改yml文件?
这就是我的docker-compose.yml的样子。 nginx: container_name: 'nginx' image: 'nginx:1.11' restart: 'always' ports: - '80:80' - '443:443' volumes: - '/opt/nginx/conf.d:/etc/nginx/conf.d:ro' links: - 'anything' 现在,我需要通过shell脚本(在ubuntu服务器上)添加一些内容。我不太确定是否有可能: 将新元素添加到nginx/links(如果不存在) newthing如果不存在newthing-block,则附加块 新内容应如下所示: nginx: container_name: 'nginx' image: 'nginx:1.11' restart: 'always' ports: - '80:80' - '443:443' volumes: - '/opt/nginx/conf.d:/etc/nginx/conf.d:ro' - '/etc/letsencrypt:/etc/letsencrypt' links: - 'anything' - 'newthing' newthing: container_name: foo image: 'newthing:1.2.3' …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.