小编jay*_*ngh的帖子

如何从命令行重新加载.bash_profile?

如何.bash_profile从命令行重新加载?我可以让shell .bash_profile通过退出并重新登录来识别更改,但我希望能够按需执行此操作.

bash shell .bash-profile

920
推荐指数
9
解决办法
70万
查看次数

如何打印文本文件每行中的字符数

我想使用unix命令打印文本文件每行中的字符数.我知道powershell很简单

gc abc.txt | % {$_.length}
Run Code Online (Sandbox Code Playgroud)

但我需要unix命令.

unix shell awk sed

67
推荐指数
2
解决办法
9万
查看次数

交换两列 - awk,sed,python,perl

我有一个大文件中的数据(280列宽,700万行!)我需要交换前两列.我想我可以使用某种类型的awk for循环,打印$ 2,$ 1,然后一个范围到文件的末尾 - 但我不知道如何做范围部分,我不能打印$ 2 ,1美元,3美元...... 280美元!我在这里看到的大多数列交换答案都特定于具有可管理列数的小文件,所以我需要的东西不依赖于指定每个列号.

该文件是制表符分隔的:

Affy-id chr 0 pos NA06984 NA06985 NA06986 NA06989
Run Code Online (Sandbox Code Playgroud)

awk sed

52
推荐指数
4
解决办法
6万
查看次数

如何使用*nix中的控制台工具将\ uXXXX unicode转换为UTF-8

curl用来获取一些URL响应,它是JSON响应,它包含unicode转义的国家字符,如\u0144 (?)\u00f3 (ó).

如何将它们转换为UTF-8或任何其他编码保存到文件中?

unix linux unicode encoding json

51
推荐指数
8
解决办法
6万
查看次数

根据模式将一个文件拆分为多个文件

我有一个二进制文件,我使用hexdump和几个awk和sed命令转换为常规文件.输出文件看起来像这样 -

$cat temp
3d3d01f87347545002f1d5b2be4ee4d700010100018000cc57e5820000000000000000000
000000087d3f513000000000000000000000000000000000001001001010f000000000026 
58783100b354c52658783100b43d3d0000ad6413400103231665f301010b9130194899f2f
fffffffffff02007c00dc015800a040402802f1d5b2b8ca5674504f433031000000000004
6363070000000000000000000000000065450000b4fb6b4000393d3d1116cdcc57e58287d
3f55285a1084b
Run Code Online (Sandbox Code Playgroud)

临时文件很少有眼睛捕捉器(3d3d),它们不经常重复.他们有点表示新二进制记录的开始.我需要根据那些吸引眼球来分割文件.

我想要的输出是有多个文件(根据我的临时文件中的引人注目的数量).

所以我的输出看起来像这样 -

$cat temp1
3d3d01f87347545002f1d5b2be4ee4d700010100018000cc57e582000000000000000
0000000000087d3f513000000000000000000000000000000000001001001010f00000000
002658783100b354c52658783100b4

$cat temp2
3d3d0000ad6413400103231665f301010b9130194899f2ffffffffffff02007c00dc0
15800a040402802f1d5b2b8ca5674504f4330310000000000046363070000000000000000
000000000065450000b4fb6b400039

$cat temp3
3d3d1116cdcc57e58287d3f55285a1084b
Run Code Online (Sandbox Code Playgroud)

bash awk split sed

18
推荐指数
3
解决办法
3万
查看次数

按顺序遍历文件名列表,以便在bash中创建

解析输出ls以遍历文件列表是不好的.那么我应该如何按照它们首次创建的顺序迭代文件列表?我在这里浏览了几个问题,他们似乎都解析了ls.

嵌入式链接表明:

如果你想要一些只能ls做的特定排序,例如排序,事情变得更加困难mtime.如果您想要目录中最旧或最新的文件,请不要使用ls -t | head -1- 请参阅Bash FAQ 99.如果您确实需要mtime按顺序列出目录中的所有文件,以便按顺序处理它们,请切换到perl,并让perl程序执行自己的目录打开和排序.然后在perl程序中进行处理,或者 - 最坏的情况 - 让perl程序用NUL分隔符吐出文件名.

更好的是,将修改时间放在YYYYMMDD格式的文件名中,这样glob顺序也是mtime顺序.然后你不需要ls或perl或任何东西.(人们想要目录中最旧或最新文件的绝大多数情况都可以通过这样做来解决.)

这是否意味着没有本地方式可以做到这一点bash?我没有权限修改文件名以包含时间.我需要安排一个cron每5分钟运行一次的脚本,生成一个数组,其中包含按创建时间排序的特定目录中的所有文件,并对文件名执行一些操作并将它们移动到另一个位置.

以下工作但只是因为我没有有趣的文件名.这些文件是由服务器创建的,因此它永远不会有特殊字符,空格,换行符等.

files=( $(ls -1tr) ) 
Run Code Online (Sandbox Code Playgroud)

我可以编写一个perl可以满足我需要的脚本,但如果有人可以提出正确的方法,我会很感激bash.便携式选项会很棒,但使用最新GNU实用程序的解决方案也不会成为问题.

bash

16
推荐指数
2
解决办法
5012
查看次数

AWK:替换并在输入文件中写入列值

如果$ 3> 100,我试图替换输入文件的$ 3列值.我试过:

awk 'BEGIN {FS="\t"} {if($3 > 100) $3=$3/100;print}' test.stat
Run Code Online (Sandbox Code Playgroud)

这会输出对stdout的正确更改,但是,我需要更改以写入输入文件(test.stat),以便其余字段/记录的值保持不变.有什么建议吗?

谢谢.另一个问题出现了.我有一个"计数器"变量,其总和需要在END块中打印,我试过:

awk 'BEGIN {FS="\t",counter=0} 
{if($3 > 100) $3=$3/100;print else counter++}
END{print counter}' test.stat > ...
Run Code Online (Sandbox Code Playgroud)

现在,只有计数器值写入文件而不是$ 3值.如何将两个输出分开,以便使用read命令修改文件,另一个保存为bash变量.谢谢.

awk

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

"grep -e"和"grep -E"之间有什么区别

我有一个文件test.txt,其中有一些格式化的电话号码.我正试图grep找到包含电话号码的线路.

它似乎grep -e "[0-9]{3}-[0-9]{3}-[0-9]{4}" test.txt不起作用,没有结果.但是grep -E "[0-9]{3}-[0-9]{3}-[0-9]{4}" test.txt有效.所以我想知道这两个选项之间有什么区别.

根据man grep:

-E, - extended-regexp将模式解释为扩展正则表达式(即强制grep表现为egrep).

-e pattern, - regexp = pattern指定搜索输入时使用的模式:如果输入行匹配任何指定的模式,则选择该输入行.当多个-e选项用于指定多个模式时,或者当模式以短划线(" - ")开头时,此选项最有用.

但我不太明白.什么是扩展的正则表达式?

linux shell grep

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

使用sed或awk删除两个模式之间的所有行(不包括模式)

我有一个有点大的输出文本文件,我需要删除两个模式之间的所有行,但保持模式匹配.

这些文件看起来像以下输出一样模糊.

 TEST #1          
      coef1 |   48.36895    3.32013    14.57   0.000     41.86141    54.87649
      coef2 |  -50.08894   10.47335    -4.78   0.000    -70.61697   -29.56092
            |
  indicator |
         0  |   .6647992   2.646627     0.25   0.802     -4.55925    5.888849
         1  |   2.118701   5.225777     0.41   0.686     -8.19621    12.43361
            |
       year |
         2  |  -.4324005   2.231387    -0.19   0.847    -4.836829    3.972028
         3  |   -.362762    1.97184    -0.18   0.854    -4.254882    3.529358
            |
      _cons |   16.95753   6.342342     2.67   0.008     4.526383    29.38869
 TEST #2          
        coef2 |   48.36895    3.32013    14.57   0.000     41.86141    54.87649
        coef3 |  -50.08894 …
Run Code Online (Sandbox Code Playgroud)

regex awk sed

10
推荐指数
2
解决办法
3709
查看次数

在UNIX中创建二进制文件

这个问题已经存在了一段时间,如果我可以让它工作,我认为我应该提供一些奖励积分.

我做了什么......

最近在工作中,我写了一个解析器,它将以可读格式转换二进制文件.二进制文件不是带10101010字符的Ascii文件.它已经以二进制编码.所以如果我cat在文件上做一个,我得到以下 -

[jaypal~/Temp/GTP]$ cat T20111017153052.NEW 
==?sGTP???N????W????&Xx1?T?&Xx1?;
?d@#e?
      ?0H????????|?X?@@(????VtPOC01
cceE??k@9??W???R?K?i2??d@#e???&Xx1&Xx??!?
blackberrynet?/??!

??!

??#ripassword??W??W???0H??
                            #R??@Vtc@@(????n?POC01
Run Code Online (Sandbox Code Playgroud)

所以我使用hexdump实用程序使文件显示在内容之后并将其重定向到文件.现在我的输出文件是一个包含Hex值的文本文件.

[jaypal~/Temp/GTP]$ hexdump -C T20111017153052.NEW 
00000000  3d 3d 01 f8 73 47 54 50  02 f1 d5 b2 be 4e e4 d7  |==..sGTP.....N..|
00000010  00 01 01 00 01 80 00 cc  57 e5 82 00 00 00 00 00  |........W.......|
00000020  00 00 00 00 00 00 00 00  87 d3 f5 13 00 00 00 00  |................| …
Run Code Online (Sandbox Code Playgroud)

bash parsing hexdump binaryfiles xxd

9
推荐指数
1
解决办法
8392
查看次数

标签 统计

awk ×5

bash ×4

sed ×4

shell ×3

linux ×2

unix ×2

.bash-profile ×1

binaryfiles ×1

encoding ×1

grep ×1

hexdump ×1

json ×1

parsing ×1

regex ×1

split ×1

unicode ×1

xxd ×1