以下是我需要更改的一些值:
如果第一列是2=
如果第一列是8=
如果第一列是16=
CHR SNP BP A1 TEST NMISS BETA STAT P
2 rs10173732 31404 A ADD 2607 -0.02162 -1.552 0.1207
2 rs10173732 31404 A COV1 2607 0.2659 24.15 1.849e-116
2 rs11684864 2547285 G ADD 2596 -0.009581 -0.6387 0.5231
2 rs11684864 2547285 G COV1 2596 0.2672 24.18 1.212e-116
2 rs11684864 2547285 G COV2 2596 0.004941 9.564 2.548e-21
8 rs3826201 88651817 T COV3 2576 -0.0186 -15.7 4.335e-53
16 rs8047319 88684276 C ADD 2538 0.01115 1.271 0.204
16 rs8047319 88684276 C COV1 2538 0.2632 23.73 1.402e-112
16 rs8047319 88684276 C COV2 2538 0.005039 9.715 6.276e-22
16 rs8047319 88684276 C COV3 2538 -0.01891 -15.9 2.583e-54
然而,这个命令并不方便,因为它改变了缩进,并且带有8的行似乎不适合:
awk '{ if ( $1 == 2 ) { $1 = 1 } else if ( $1 == 8 ) { $1 == 2 } else if ( $1 == 16 ) { $1 = 3 }; print}' TEST > TESTnew
输出:
CHR SNP BP A1 TEST NMISS BETA STAT P
1 rs10173732 31404 A ADD 2607 -0.02162 -1.552 0.1207
1 rs10173732 31404 A COV1 2607 0.2659 24.15 1.849e-116
1 rs11684864 2547285 G ADD 2596 -0.009581 -0.6387 0.5231
1 rs11684864 2547285 G COV1 2596 0.2672 24.18 1.212e-116
1 rs11684864 2547285 G COV2 2596 0.004941 9.564 2.548e-21
8 rs3826201 88651817 T COV3 2576 -0.0186 -15.7 4.335e-53
3 rs8047319 88684276 C ADD 2538 0.01115 1.271 0.204
3 rs8047319 88684276 C COV1 2538 0.2632 23.73 1.402e-112
3 rs8047319 88684276 C COV2 2538 0.005039 9.715 6.276e-22
3 rs8047319 88684276 C COV3 2538 -0.01891 -15.9 2.583e-54
您将如何更正更通用的内容(这意味着即使特定行的缩进不同,它也可以工作),并且不会改变原始文件的缩进?
您可以在sed
中进行替换:
sed 's/^\( *\)2/\11/ ; s/^\( *\)8/\12/ ; s/^\( *\)16/\1 3/'
这将在一个脚本中完成所有三个替换^\(*\)
捕获行首和数字之前的所有空格<代码>\1替换它们以保留缩进。出于同样的原因,我将16
替换为3
。
与GNU awk的第三个参数匹配():
$ awk 'BEGIN { m[2]=1; m[8]=2; m[16]=3 }
$1 in m { match($0,/(\s*\S+)(.*)/,a); $0=sprintf("%*s",length(a[1]),m[$1]) a[2] }
1' file
CHR SNP BP A1 TEST NMISS BETA STAT P
1 rs10173732 31404 A ADD 2607 -0.02162 -1.552 0.1207
1 rs10173732 31404 A COV1 2607 0.2659 24.15 1.849e-116
1 rs11684864 2547285 G ADD 2596 -0.009581 -0.6387 0.5231
1 rs11684864 2547285 G COV1 2596 0.2672 24.18 1.212e-116
1 rs11684864 2547285 G COV2 2596 0.004941 9.564 2.548e-21
2 rs3826201 88651817 T COV3 2576 -0.0186 -15.7 4.335e-53
3 rs8047319 88684276 C ADD 2538 0.01115 1.271 0.204
3 rs8047319 88684276 C COV1 2538 0.2632 23.73 1.402e-112
3 rs8047319 88684276 C COV2 2538 0.005039 9.715 6.276e-22
3 rs8047319 88684276 C COV3 2538 -0.01891 -15.9 2.583e-54
如果1、2和3值只是一个增量索引:
$ awk 'BEGIN{split("2 8 16",t); for (i in t) m[t[i]]=i} $1 in m{match($0,/(\s*\S+)(.*)/,a); $0=sprintf("%*s",length(a[1]),m[$1]) a[2]} 1' file
CHR SNP BP A1 TEST NMISS BETA STAT P
1 rs10173732 31404 A ADD 2607 -0.02162 -1.552 0.1207
1 rs10173732 31404 A COV1 2607 0.2659 24.15 1.849e-116
1 rs11684864 2547285 G ADD 2596 -0.009581 -0.6387 0.5231
1 rs11684864 2547285 G COV1 2596 0.2672 24.18 1.212e-116
1 rs11684864 2547285 G COV2 2596 0.004941 9.564 2.548e-21
2 rs3826201 88651817 T COV3 2576 -0.0186 -15.7 4.335e-53
3 rs8047319 88684276 C ADD 2538 0.01115 1.271 0.204
3 rs8047319 88684276 C COV1 2538 0.2632 23.73 1.402e-112
3 rs8047319 88684276 C COV2 2538 0.005039 9.715 6.276e-22
3 rs8047319 88684276 C COV3 2538 -0.01891 -15.9 2.583e-54
或者您根本不需要指定现有的1美元值:
$ awk 'NR>1{ if ($1!=p) {c++++; p=$1} match($0,/(\s*\S+)(.*)/,a); $0=sprintf("%*s",length(a[1]),c) a[2]} 1' file
CHR SNP BP A1 TEST NMISS BETA STAT P
1 rs10173732 31404 A ADD 2607 -0.02162 -1.552 0.1207
1 rs10173732 31404 A COV1 2607 0.2659 24.15 1.849e-116
1 rs11684864 2547285 G ADD 2596 -0.009581 -0.6387 0.5231
1 rs11684864 2547285 G COV1 2596 0.2672 24.18 1.212e-116
1 rs11684864 2547285 G COV2 2596 0.004941 9.564 2.548e-21
2 rs3826201 88651817 T COV3 2576 -0.0186 -15.7 4.335e-53
3 rs8047319 88684276 C ADD 2538 0.01115 1.271 0.204
3 rs8047319 88684276 C COV1 2538 0.2632 23.73 1.402e-112
3 rs8047319 88684276 C COV2 2538 0.005039 9.715 6.276e-22
3 rs8047319 88684276 C COV3 2538 -0.01891 -15.9 2.583e-54
问题内容: 是否可以在sql中执行更新语句,但仅在更新不同时才执行更新? 例如 如果在数据库中, 不应 执行任何类型的更新 但是,如果 这 应该 执行更新。 问题答案: 使用更新前触发器可以做到这一点。在此触发器中,您可以将旧值与新值进行比较,并在新值不变的情况下取消更新。但这将导致呼叫者网站上的错误。 我不知道为什么要这样做,但是这里有几种可能性: 性能:这里没有性能提升,因为更新不仅需要找到正
我还没弄明白。Atom似乎使用空格作为默认缩进模式。不过我更喜欢标签。Sublime Text内置了切换和转换缩进的功能。 有人知道如何改变原子的缩进模式吗? 来自Sublime文本的一些屏幕截图:
我想跟踪表上的更改,并在发生 UPDATE 后将它们存储在相应的历史记录表中(如果至少有一个字段已更改)。 我有以下表格: tbl员工 tbl_employees_history 作用 触发 到目前为止一切都很好,这件事很管用。但我想知道我是否有一个有15列的表,如果其中一列发生了更改,我想保存一个历史记录。我必须对每个字段重复IF语句吗?还是有某种技巧可以检查每个列?这样,我就可以在表中添加一列
最近没有使用当前tidyverse动词来回答这个问题(R 4.1 所需的输出应如下所示。感谢您对此的任何帮助!
我想知道是否有一种方法可以在VSCode中格式化javascript时更改缩进大小。 我发现这个git提交为JS添加了很多格式选项,但我看不到任何更改缩进大小的能力。 有人知道怎么做吗? --编辑-- 我已经尝试在编辑器底部改变缩进大小。工具栏图像(还不能嵌入图像...) 我还尝试更改检测缩进设置。 但是当我格式化时,它仍然使用两个空格。
我想使用JavaFX ListView控件显示一个人员列表(在POJOS中编码,包含一个name和surname属性)。我创建了ListView,并将persons列表添加为ObservableList。如果我在ObservableList中删除或添加一个新人,那么一切都可以正常工作,但是POJO中的更改不会触发ListView的更新。我必须从ObservableList中移除和添加修改后的POJ