小编Mad*_*vad的帖子

在脚本中将两个变量流作为输入传递给 awk

这是我原来的命令行:

awk 'FNR==NR{a[$2]=$1;next}($2 in a){if(a[$2]!=$1)print $2}' file1 file2
Run Code Online (Sandbox Code Playgroud)

它位于 bash 脚本中,我最初将每个部分输出到一个文件,然后在下一行我使用该文件作为输入。但是,现在我正在切换到使用变量,并且我已经深入到这一行并且由于双重输入而卡住了。

所以我不再试图将文件提供给 awk,我想要提供变量。

如果我正在处理一个变量,我知道我会这样做:

echo "$var1" | awk '{$1=$2=""; print $0}'
Run Code Online (Sandbox Code Playgroud)

但是我找不到如何在 bash 脚本中将第二个变量/流传递到 awk 的示例。

我试过的例子:

awk 'FNR==NR{a[$2]=$1;next}($2 in a){if(a[$2]!=$1)print $2}' "$var1" "$var2"

echo "${var1}" | awk 'FNR==NR{a[$2]=$1;next}($2 in a){if(a[$2]!=$1)print $2}' "${var2}"

awk -v s1="$var1" -v s2="$var2" 'FNR==NR{a[$2]=$1;next}($2 in a){if(a[$2]!=$1)print $2}' "$s1" "$s2"
Run Code Online (Sandbox Code Playgroud)

编辑:

对于某些背景,这是一个非常简化的版本,但我有一组类似这样的文件:

:~/test$ ls -lR ?/file*
-rw-rw-r-- 1 madivad madivad 11 Apr 19 23:17 1/file.0
-rw-rw-r-- 1 madivad madivad  6 Apr 19 23:04 1/file.1
-rw-rw-r-- 1 …
Run Code Online (Sandbox Code Playgroud)

bash awk

6
推荐指数
1
解决办法
8693
查看次数

为什么扫描码和键码相差 8?

我一直在使用键盘来重新映射某些键并创建宏等。

我了解键盘(通过 USB,我指的是带有 USB 键盘的台式计算机)提供了一个scancode依赖于键盘的功能,根据由各种 hwdb 资源组成的规则映射到键描述符或键代码。然后这些键码由操作系统解释。

我发现evtest直接从键盘给出最好的结果,因为它包含键盘扫描码、键码和键符号,所有这些都在一个整洁的小输出中。为了使其更干净,我通常grep将输出变得更加整洁:

sudo evtest | grep -B1 "value 1"
Run Code Online (Sandbox Code Playgroud)

但是, xmodmap 和各种应用程序使用的代码是输出(如果输出) y的代码xev。我没有很好的grepfor xev,我只是按键盘事件进行过滤:

xev -event keyboard
Run Code Online (Sandbox Code Playgroud)

这个问题涉及

我确信有人会认为这是因为前 8 个代码被保留,但这应该是无关紧要的,不是吗?键码,无论是否保留,是否不应该作为原始代码输出,而不是转置的值(无论是任意值还是固定值)并可能导致错误?

我真的只是想理解为什么有些程序输出和为什么有些系统需要 8 输出的输入之间的差异,以及如何在我的脑海中认可这种不一致。

keyboard

5
推荐指数
0
解决办法
700
查看次数

重定向命令的输出,就好像它是文件输入一样

我发现自己总是必须在命令行中向上箭头并向后移动,以更改先前命令的一部分,该部分会被转移到稍后的命令grephead其他命令。

举一个简单的例子:搜索dmesg给定的字符串并且只想要最后 5 个出现的字符串。

我会这样做:

dmesg | grep -i USB | tail -n 5
Run Code Online (Sandbox Code Playgroud)

但如果我想更改搜索词或我正在搜索的内容或来源,我会等待光标回溯到该行的相关部分。我想将其移至行尾,以便上面的示例可以表示为(我知道这是不正确的):

tail -n 5 < dmesg | grep -i USB(然后我可以搜索sda

正如我所说,这是一个粗略的例子,表明了我想做的事情,但实际上并不是我想做的事情,即。这不是关于anddmesg的使用,而是如何在这些程序之间进行交互,并将“变量”放在末尾。greptail

这可以进一步以获取 DNS 查询的查找时间为例:

dig google.com | grep msec(让我们移动google.com到最后,以便我可以测试另一个域)通过
grep msec < dig google.com

再次,糟糕的例子。我更多地讨论的是当我在多个程序之间有输入/输出流动时

我承认我对管道和重定向只有基本的了解,可以总结为:

  • 管道 ( |)使用stdout一个程序的输入到stdin另一个程序的 输入
  • 重定向(>获取stdout一个程序的并将其输入到一个文件中(旁白:除了我能想到的唯一明显的程序之外,它是否可以重定向到其他地方,
    > /dev/null 或者
    > /dev/sda …

pipe io-redirection

3
推荐指数
1
解决办法
7431
查看次数

如何带回 md5deep

我已经使用md5deep了很长时间,超过10年。它对我来说是一个自然的“去”工具,因为它提供了递归、匹配和缺失模式,甚至是我喜欢的分类。

我知道并使用过较新的工具,hashdeep并且都至少安装在一台机器上。

我注意到我在不同的盒子上有不同的版本,直到我昨天安装了其他东西并注意到它md5deep被“阻止”时才考虑太多。不确定原因和快速研究没有发现依赖问题,所以我升级了它。结果hashdeep被安装了(没问题,就像我说的,我已经使用了它)但是虽然它“出现” md5deep 没有被删除,但它确实有这种感觉。

me@home:~$ sudo apt-get install md5deep
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  hashdeep
The following NEW packages will be installed:
  hashdeep
The following packages will be upgraded:
  md5deep
1 to upgrade, 1 to newly install, 0 to remove and 105 not to upgrade.
Need to get 0 B/119 kB of archives.
After this operation, 1,123 kB …
Run Code Online (Sandbox Code Playgroud)

software-installation hashsum

2
推荐指数
1
解决办法
2533
查看次数