给定以下 3 个脚本:
printf 'a\nb\nc\n' > file && { head -n 1; cat; } < fileprintf 'a\nb\nc\n' | { head -n 1; cat; }{ head -n 1; cat; } < <(printf 'a\nb\nc\n')我期望每个的输出是:
a
b
c
Run Code Online (Sandbox Code Playgroud)
但对于其中一些系统,在某些系统上,情况并非如此。例如,在 cygwin 上:
$ printf 'a\nb\nc\n' > file && { head -n 1; cat; } < file
a
b
c
Run Code Online (Sandbox Code Playgroud)
$ printf 'a\nb\nc\n' | { head -n 1; cat; }
a
Run Code Online (Sandbox Code Playgroud)
$ { head -n 1; cat; } < <(printf 'a\nb\nc\n')
a …Run Code Online (Sandbox Code Playgroud) 真正让我感到困惑的是引号。
我有一个file.txt像这样的行:
{"a":"town, state, country","e":["john@company.com"],"n":"john smith"}
{"a":"town, state, country","e":["zac@company.com","zacsurname@gmail.com"],"n":"zac surname"}
{"a":"town, state, country","n":"jane doe"}
Run Code Online (Sandbox Code Playgroud)
我只在寻找名字和电子邮件,并丢弃没有两者的数据。所以output.txt上面的 3 行应该是:
john john@company.com
zac zac@company.com
zac zacsurname@gmail.com
Run Code Online (Sandbox Code Playgroud)
我试过 awk、nawk、pcregrep、sed、perl,例如:
awk -F ":" '$1 ~ /^e/ && $1 ~ /^n/ { print $1,$1 }' file.txt > output.txt
awk -F "\"e\":\"" '{ print $1}' file.txt > output.txt
nawk '/\"e\":[\"/, /\"]/' file.txt > output.txt
pcregrep -o '(?<=[\").*?(?=\"])' <<< file.txt > output.txt
Run Code Online (Sandbox Code Playgroud)
它都不起作用。感谢您的帮助。
我想输出每个列/字段,但是当我使用变量执行此操作时,它会忽略作为单个的$0默认变量,因此仍然会打印。OFSspace:
这是我尝试过的命令:
cat /etc/passwd | awk -F':' '{print $0}'
Run Code Online (Sandbox Code Playgroud)
给定此示例输入:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
Run Code Online (Sandbox Code Playgroud)
我从命令中得到以下输出:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
Run Code Online (Sandbox Code Playgroud)
但我希望我的输出看起来像这样:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助 :)
我有 2 个带*分隔符的文件,每个文件有 3k 条记录。
不同的岗位有共同的领域。在file1(count=1590) 中,位置为 1,在file2(2707) 中,位置为 2。file2 计数和输出计数应该相同。注意:在 file2 中,第二个位置编号将出现在 file1 中,我们需要取相应的 $3 值,即 1 或 0
在这两个文件中,总计数为 3k,两个文件都是 * 分隔符,其中 file1 $1 和 file2 $2 是两个文件的公共字段,我们需要检查公共字段是否有 0 或 1 存在于 file1 $3 中。我们需要写这样的文件 1==>000000001 D056002001 1 2==>000000003 D079291785 0, $1=seqno,$2=matched9digit value folwed by D 和 $3 无论是 0 还是 1
file2 中的所有 $2 值将在 file1 中显示为 $1 值。
文件 1:
D056002001**1
D005356216**1
D079291785**0
D610350290**1
Run Code Online (Sandbox Code Playgroud)
文件2:
000000001*D056002001
000000002*D610350290
000000003*D079291785
Run Code Online (Sandbox Code Playgroud)
输出:
000000001*D056002001*1 …Run Code Online (Sandbox Code Playgroud) 我正在尝试按字母顺序对看起来像这样的 XML 文件进行排序。这是一个更大的 bash 脚本的一部分,因此它需要在该脚本中工作:
<Module>
<Settings>
<Dimensions>
<Volume>13000</Volume>
<Width>5000</Width>
<Length>2000</Length>
</Dimensions>
<Stats>
<Mean>1.0</Mean>
<Max>3000</Max>
<Median>250</Median>
</Stats>
</Settings>
<Debug>
<Errors>
<Strike>0</Strike>
<Wag>1</Wag>
<MagicMan>0</MagicMan>
</Errors>
</Debug>
</Module>
Run Code Online (Sandbox Code Playgroud)
我希望最终结果看起来像这样,我只希望对最里面的标签进行排序:
<Module>
<Settings>
<Dimensions>
<Length>2000</Length>
<Volume>13000</Volume>
<Width>5000</Width>
</Dimensions>
<Stats>
<Max>3000</Max>
<Mean>1.0</Mean>
<Median>250</Median>
</Stats>
</Settings>
<Debug>
<Errors>
<MagicMan>0</MagicMan>
<Strike>0</Strike>
<Wag>1</Wag>
</Errors>
</Debug>
</Module>
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用这样的排序,其中 -t 按 > 分隔符排序,然后按第 4 列排序,这将在内部,但它不起作用。
sort -t'>' -k4 file > final.xml
Run Code Online (Sandbox Code Playgroud)
我得到时髦的输出,它用排序的内部标签对其他列进行排序。
任何帮助,将不胜感激
我在 Linux 系统上有一个包含 3 列的文件(以逗号分隔)。我想在每第四行之后开始新的列。
输入:
col1,col2,col3
1,disease1,high
1,disease2,low
1,disease3,high
col1,col2,col3
2,disease1,low
2,disease2,low
2,disease3,high
col1,col2,col3
3,disease1,low
3,disease2,low
3,disease3,low
Run Code Online (Sandbox Code Playgroud)
预期输出:
col1,col2,col3,col1,col2,col3,col1,col2,col3
1,disease1,high,2,disease1,low,3,disease1,low
1,disease2,low,2,disease2,low,3,disease2,low
1,disease3,high,2,disease3,high,disease3,low
Run Code Online (Sandbox Code Playgroud)
即我想要 4 行输出,每行都是用逗号连接输入的每第四行的结果。
我想知道如何根据每个感兴趣的列中的特定值来过滤具有多个列的表。
我这里有这个例子:
Chr1 16644 0 0 1 1
Chr1 16645 0 0 1 1
Chr1 16646 0 0 1 1
Chr1 16647 0 0 1 1
Chr1 16648 0 0 1 1
Chr1 16649 0 0 1 1
Chr1 16650 0 0 1 1
Chr1 16651 0 0 1 1
Chr1 16782 0 0 0 0
Chr1 16783 0 0 0 0
Chr1 16784 0 0 0 0
Chr1 16785 0 0 0 0
Chr1 16786 0 0 1 1 …Run Code Online (Sandbox Code Playgroud) 我有大量的数据格式如下:
value1,value2,value3
value1,value2,value3
value1,value2,value3
etc..
Run Code Online (Sandbox Code Playgroud)
我想知道如何从每一行中只提取 value2 并输出该结果。我假设我会以某种方式使用 awk?
我遇到了一个问题,无法找到解决以下问题的解决方案。
如果它们以特殊字符开头,我想将一行的第一个单词复制到以下 n 行的开头,否则复制新单词。
输入:
aaa random words
`dsf
|df
bbb
|d
Run Code Online (Sandbox Code Playgroud)
输出:
aaa random words
aaa`dsf
aaa|df
bbb
bbb|d
Run Code Online (Sandbox Code Playgroud)