当我们有一种类似列表的文件时:
Mary 34
George 45
John 56
Josh 29
Run Code Online (Sandbox Code Playgroud)
使用awk
命令$1
指的是第一列和$2
第二列。但是一旦我们编写了一个shell脚本,我们就可以使用read line
读取整行或者我们可以使用read number
读取第一个单词,对吗?所以我的问题是在上面如果我想阅读第二列,如果不使用awk
shell 脚本中的命令,我将如何做到这一点。
我的输入文件在第一列中有不同数量的空格(或没有空格)的位置
16504 16516
1650811 16520
1651 16524
16516111 16528
165204 16532
Run Code Online (Sandbox Code Playgroud)
我需要得到一个输出文件,其中第一列根本没有空格,同时保持第二列不变。
16504 16516
16508 16520
16512 16524
16516 16528
16520 16532
Run Code Online (Sandbox Code Playgroud) 假设我有一些 CLI one-liner,它输出一些带有空格分隔部分的文本行。这些部分在逻辑上应该是列,但由于文本宽度,它看起来并非如此。
我如何自动格式化这样的输出以使其成为漂亮的列?
例如,我有类似的输出
Alice param1 param2345 32768 50 16
Bob param2345 param1 512 10 1
_debug_user_ param0 param0 0 0 0
Run Code Online (Sandbox Code Playgroud)
我想让它像
Alice param1 param2345 32768 50 16
Bob param2345 param1 512 10 1
_debug_user_ param0 param0 0 0 0
Run Code Online (Sandbox Code Playgroud) 我有一个文件,需要提取两列。
但是,我无法正确对齐它。我尝试使用column -t
,但收到错误消息bash: column: command not found
。
awk '{print $1" "$2}' | column -t
Run Code Online (Sandbox Code Playgroud) 如何从以这样results.txt
的行命名的文件中删除虚拟信息?
文件内的行是这样的:
_my0001_split00000000.txt:Total Dynamic Power = 0.0000 mW
_my0001_split00000050.txt:Total Dynamic Power = 117.5261 uW (100%)
Run Code Online (Sandbox Code Playgroud)
...它们应该更改为制表符分隔的格式,如下所示:
0001 00000000 0.0000 mW
0001 00000050 117.5261 uW
Run Code Online (Sandbox Code Playgroud) 我想从文件中提取数据并将其组织在一个大的固定宽度表中。我可以预期这个表会有多列,比如说 30 列。如果我使用传统awk
命令行创建这个表,那么我将需要编写一个很长的awk
命令行,类似于以下内容:
awk '{printf "%-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s %-5s\n", $1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30}'
Run Code Online (Sandbox Code Playgroud)
有没有办法让这个线性更短?例如,我正在考虑在之前的长命令中实现一个数组。这个数组将告诉awk
我想要创建的列的数量和宽度是多少,而不是分别定义每一列,例如:
awk 'BEGIN {for i in {1..30}; do echo %-5s\n print i}
Run Code Online (Sandbox Code Playgroud)
如何在内部正确实现awk
以创建多个固定宽度的列?
column
有封装形式util-linux
和bsdmainutils
。这两个软件包都安装在 Linux Mint 20.2 中
$ type column
column is /usr/bin/column
column is /bin/column
Run Code Online (Sandbox Code Playgroud)
这两个列都指向 bsd 列工具。我如何从 访问该工具util-linux
?
我在不同的文件中有 2 个文本file1
和file2
. 我需要一个将file1
和file2
作为参数并在终端上打印的命令
This is text 1. This is This is text 2. This is
text 1.This is text 1. This text 2.This is text 2. This
is text 1. This is text 1. is text 2. This is text 2.
This is text 1. This is text 2.
Run Code Online (Sandbox Code Playgroud) 我正在完成我的课程完成工作,我需要操作具有 60 万行的 .csv 文件的某些列。我已经在几个关于 sed 和 awk 的论坛中搜索过,但没有找到类似的东西(不幸的是,我对 Linux 的了解不是很深)。我发现通常只处理一列或全部......我需要的是只在第一、第五和第六列中放置双引号。
例如:
2018-03-18 4:56:17,255.255.255.255,00,ssh,admin,123
Run Code Online (Sandbox Code Playgroud)
成为
"2018-03-18 4:56:17",255.255.255.255,00,ssh,"admin","123"
Run Code Online (Sandbox Code Playgroud)
不过,也许我还是会更改一些专栏,因为我刚刚开始从事数据挖掘,我不知道几周后的配置会是什么样子,所以如果你能做一个简单的逻辑语法,我将永远感激.
columns ×10
awk ×5
sed ×2
shell-script ×2
command-line ×1
csv ×1
linux-mint ×1
shell ×1
util-linux ×1